UNPKG

matrix-react-sdk

Version:
729 lines (617 loc) 95.5 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _RovingTabIndex = require("../../../accessibility/RovingTabIndex"); var _AccessibleButton = _interopRequireDefault(require("../../views/elements/AccessibleButton")); var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher")); var _Keyboard = require("../../../Keyboard"); var _ActiveRoomObserver = _interopRequireDefault(require("../../../ActiveRoomObserver")); var _languageHandler = require("../../../languageHandler"); var _ContextMenu = require("../../structures/ContextMenu"); var _models = require("../../../stores/room-list/models"); var _MessagePreviewStore = require("../../../stores/room-list/MessagePreviewStore"); var _DecoratedRoomAvatar = _interopRequireDefault(require("../avatars/DecoratedRoomAvatar")); var _RoomNotifs = require("../../../RoomNotifs"); var _MatrixClientPeg = require("../../../MatrixClientPeg"); var _NotificationBadge = _interopRequireDefault(require("./NotificationBadge")); var _RoomListStore = _interopRequireDefault(require("../../../stores/room-list/RoomListStore")); var _RoomListActions = _interopRequireDefault(require("../../../actions/RoomListActions")); var _RoomNotificationStateStore = require("../../../stores/notifications/RoomNotificationStateStore"); var _NotificationState = require("../../../stores/notifications/NotificationState"); var _AccessibleTooltipButton = _interopRequireDefault(require("../elements/AccessibleTooltipButton")); var _EchoChamber = require("../../../stores/local-echo/EchoChamber"); var _RoomEchoChamber = require("../../../stores/local-echo/RoomEchoChamber"); var _GenericEchoChamber = require("../../../stores/local-echo/GenericEchoChamber"); var _IconizedContextMenu = _interopRequireWildcard(require("../context_menus/IconizedContextMenu")); var _CommunityPrototypeStore = require("../../../stores/CommunityPrototypeStore"); var _replaceableComponent = require("../../../utils/replaceableComponent"); var _RoomStatusBar = require("../../structures/RoomStatusBar"); var _StaticNotificationState = require("../../../stores/notifications/StaticNotificationState"); var _dec, _class, _temp; const messagePreviewId = (roomId /*: string*/ ) => `mx_RoomTile_messagePreview_${roomId}`; const contextMenuBelow = (elementRect /*: PartialDOMRect*/ ) => { // align the context menu's icons with the icon which opened the context menu const left = elementRect.left + window.pageXOffset - 9; const top = elementRect.bottom + window.pageYOffset + 17; const chevronFace = _ContextMenu.ChevronFace.None; return { left, top, chevronFace }; }; let RoomTile = (_dec = (0, _replaceableComponent.replaceableComponent)("views.rooms.RoomTile"), _dec(_class = (_temp = class RoomTile extends _react.default.PureComponent /*:: <IProps, IState>*/ { constructor(props /*: IProps*/ ) { super(props); (0, _defineProperty2.default)(this, "dispatcherRef", void 0); (0, _defineProperty2.default)(this, "roomTileRef", /*#__PURE__*/(0, _react.createRef)()); (0, _defineProperty2.default)(this, "notificationState", void 0); (0, _defineProperty2.default)(this, "roomProps", void 0); (0, _defineProperty2.default)(this, "onRoomNameUpdate", room => { this.forceUpdate(); }); (0, _defineProperty2.default)(this, "onNotificationUpdate", () => { this.forceUpdate(); // notification state changed - update }); (0, _defineProperty2.default)(this, "onResize", () => { if (this.showMessagePreview && !this.state.messagePreview) { this.generatePreview(); } }); (0, _defineProperty2.default)(this, "onLocalEchoUpdated", (ev /*: MatrixEvent*/ , room /*: Room*/ ) => { if (!room?.roomId === this.props.room.roomId) return; this.setState({ hasUnsentEvents: this.countUnsentEvents() > 0 }); }); (0, _defineProperty2.default)(this, "onRoomPropertyUpdate", (property /*: CachedRoomKey*/ ) => { if (property === _RoomEchoChamber.CachedRoomKey.NotificationVolume) this.onNotificationUpdate(); // else ignore - not important for this tile }); (0, _defineProperty2.default)(this, "onAction", (payload /*: ActionPayload*/ ) => { if (payload.action === "view_room" && payload.room_id === this.props.room.roomId && payload.show_room_tile) { setImmediate(() => { this.scrollIntoView(); }); } }); (0, _defineProperty2.default)(this, "onCommunityUpdate", (roomId /*: string*/ ) => { if (roomId !== this.props.room.roomId) return; this.forceUpdate(); // we don't have anything to actually update }); (0, _defineProperty2.default)(this, "onRoomPreviewChanged", (room /*: Room*/ ) => { if (this.props.room && room.roomId === this.props.room.roomId) { this.generatePreview(); } }); (0, _defineProperty2.default)(this, "scrollIntoView", () => { if (!this.roomTileRef.current) return; this.roomTileRef.current.scrollIntoView({ block: "nearest", behavior: "auto" }); }); (0, _defineProperty2.default)(this, "onTileClick", (ev /*: React.KeyboardEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); _dispatcher.default.dispatch({ action: 'view_room', show_room_tile: true, // make sure the room is visible in the list room_id: this.props.room.roomId, clear_search: ev && (ev.key === _Keyboard.Key.ENTER || ev.key === _Keyboard.Key.SPACE) }); }); (0, _defineProperty2.default)(this, "onActiveRoomUpdate", (isActive /*: boolean*/ ) => { this.setState({ selected: isActive }); }); (0, _defineProperty2.default)(this, "onNotificationsMenuOpenClick", (ev /*: React.MouseEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); const target = ev.target; this.setState({ notificationsMenuPosition: target.getBoundingClientRect() }); }); (0, _defineProperty2.default)(this, "onCloseNotificationsMenu", () => { this.setState({ notificationsMenuPosition: null }); }); (0, _defineProperty2.default)(this, "onGeneralMenuOpenClick", (ev /*: React.MouseEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); const target = ev.target; this.setState({ generalMenuPosition: target.getBoundingClientRect() }); }); (0, _defineProperty2.default)(this, "onContextMenu", (ev /*: React.MouseEvent*/ ) => { // If we don't have a context menu to show, ignore the action. if (!this.showContextMenu) return; ev.preventDefault(); ev.stopPropagation(); this.setState({ generalMenuPosition: { left: ev.clientX, bottom: ev.clientY } }); }); (0, _defineProperty2.default)(this, "onCloseGeneralMenu", () => { this.setState({ generalMenuPosition: null }); }); (0, _defineProperty2.default)(this, "onTagRoom", (ev /*: ButtonEvent*/ , tagId /*: TagID*/ ) => { ev.preventDefault(); ev.stopPropagation(); if (tagId === _models.DefaultTagID.Favourite || tagId === _models.DefaultTagID.LowPriority) { const inverseTag = tagId === _models.DefaultTagID.Favourite ? _models.DefaultTagID.LowPriority : _models.DefaultTagID.Favourite; const isApplied = _RoomListStore.default.instance.getTagsForRoom(this.props.room).includes(tagId); const removeTag = isApplied ? tagId : inverseTag; const addTag = isApplied ? null : tagId; _dispatcher.default.dispatch(_RoomListActions.default.tagRoom(_MatrixClientPeg.MatrixClientPeg.get(), this.props.room, removeTag, addTag, undefined, 0)); } else { console.warn(`Unexpected tag ${tagId} applied to ${this.props.room.room_id}`); } if (ev.key === _Keyboard.Key.ENTER) { // Implements https://www.w3.org/TR/wai-aria-practices/#keyboard-interaction-12 this.setState({ generalMenuPosition: null }); // hide the menu } }); (0, _defineProperty2.default)(this, "onLeaveRoomClick", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); _dispatcher.default.dispatch({ action: 'leave_room', room_id: this.props.room.roomId }); this.setState({ generalMenuPosition: null }); // hide the menu }); (0, _defineProperty2.default)(this, "onForgetRoomClick", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); _dispatcher.default.dispatch({ action: 'forget_room', room_id: this.props.room.roomId }); this.setState({ generalMenuPosition: null }); // hide the menu }); (0, _defineProperty2.default)(this, "onOpenRoomSettings", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); _dispatcher.default.dispatch({ action: 'open_room_settings', room_id: this.props.room.roomId }); this.setState({ generalMenuPosition: null }); // hide the menu }); (0, _defineProperty2.default)(this, "onInviteClick", (ev /*: ButtonEvent*/ ) => { ev.preventDefault(); ev.stopPropagation(); _dispatcher.default.dispatch({ action: 'view_invite', roomId: this.props.room.roomId }); this.setState({ generalMenuPosition: null }); // hide the menu }); (0, _defineProperty2.default)(this, "onClickAllNotifs", ev => this.saveNotifState(ev, _RoomNotifs.ALL_MESSAGES)); (0, _defineProperty2.default)(this, "onClickAlertMe", ev => this.saveNotifState(ev, _RoomNotifs.ALL_MESSAGES_LOUD)); (0, _defineProperty2.default)(this, "onClickMentions", ev => this.saveNotifState(ev, _RoomNotifs.MENTIONS_ONLY)); (0, _defineProperty2.default)(this, "onClickMute", ev => this.saveNotifState(ev, _RoomNotifs.MUTE)); this.state = { selected: _ActiveRoomObserver.default.activeRoomId === this.props.room.roomId, notificationsMenuPosition: null, generalMenuPosition: null, hasUnsentEvents: this.countUnsentEvents() > 0, // generatePreview() will return nothing if the user has previews disabled messagePreview: "" }; this.generatePreview(); this.notificationState = _RoomNotificationStateStore.RoomNotificationStateStore.instance.getRoomState(this.props.room); this.roomProps = _EchoChamber.EchoChamber.forRoom(this.props.room); if (this.props.resizeNotifier) { this.props.resizeNotifier.on("middlePanelResized", this.onResize); } } countUnsentEvents() /*: number*/ { return (0, _RoomStatusBar.getUnsentMessages)(this.props.room).length; } get showContextMenu() /*: boolean*/ { return this.props.tag !== _models.DefaultTagID.Invite; } get showMessagePreview() /*: boolean*/ { return !this.props.isMinimized && this.props.showMessagePreview; } componentDidUpdate(prevProps /*: Readonly<IProps>*/ , prevState /*: Readonly<IState>*/ ) { if (prevProps.showMessagePreview !== this.props.showMessagePreview && this.showMessagePreview) { this.generatePreview(); } if (prevProps.room?.roomId !== this.props.room?.roomId) { _MessagePreviewStore.MessagePreviewStore.instance.off(_MessagePreviewStore.MessagePreviewStore.getPreviewChangedEventName(prevProps.room), this.onRoomPreviewChanged); _MessagePreviewStore.MessagePreviewStore.instance.on(_MessagePreviewStore.MessagePreviewStore.getPreviewChangedEventName(this.props.room), this.onRoomPreviewChanged); _CommunityPrototypeStore.CommunityPrototypeStore.instance.off(_CommunityPrototypeStore.CommunityPrototypeStore.getUpdateEventName(prevProps.room?.roomId), this.onCommunityUpdate); _CommunityPrototypeStore.CommunityPrototypeStore.instance.on(_CommunityPrototypeStore.CommunityPrototypeStore.getUpdateEventName(this.props.room?.roomId), this.onCommunityUpdate); prevProps.room?.off("Room.name", this.onRoomNameUpdate); this.props.room?.on("Room.name", this.onRoomNameUpdate); } } componentDidMount() { // when we're first rendered (or our sublist is expanded) make sure we are visible if we're active if (this.state.selected) { this.scrollIntoView(); } _ActiveRoomObserver.default.addListener(this.props.room.roomId, this.onActiveRoomUpdate); this.dispatcherRef = _dispatcher.default.register(this.onAction); _MessagePreviewStore.MessagePreviewStore.instance.on(_MessagePreviewStore.MessagePreviewStore.getPreviewChangedEventName(this.props.room), this.onRoomPreviewChanged); this.notificationState.on(_NotificationState.NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate); this.roomProps.on(_GenericEchoChamber.PROPERTY_UPDATED, this.onRoomPropertyUpdate); this.roomProps.on("Room.name", this.onRoomNameUpdate); _CommunityPrototypeStore.CommunityPrototypeStore.instance.on(_CommunityPrototypeStore.CommunityPrototypeStore.getUpdateEventName(this.props.room.roomId), this.onCommunityUpdate); _MatrixClientPeg.MatrixClientPeg.get().on("Room.localEchoUpdated", this.onLocalEchoUpdated); } componentWillUnmount() { if (this.props.room) { _ActiveRoomObserver.default.removeListener(this.props.room.roomId, this.onActiveRoomUpdate); _MessagePreviewStore.MessagePreviewStore.instance.off(_MessagePreviewStore.MessagePreviewStore.getPreviewChangedEventName(this.props.room), this.onRoomPreviewChanged); _CommunityPrototypeStore.CommunityPrototypeStore.instance.off(_CommunityPrototypeStore.CommunityPrototypeStore.getUpdateEventName(this.props.room.roomId), this.onCommunityUpdate); this.props.room.off("Room.name", this.onRoomNameUpdate); } if (this.props.resizeNotifier) { this.props.resizeNotifier.off("middlePanelResized", this.onResize); } _ActiveRoomObserver.default.removeListener(this.props.room.roomId, this.onActiveRoomUpdate); _dispatcher.default.unregister(this.dispatcherRef); this.notificationState.off(_NotificationState.NOTIFICATION_STATE_UPDATE, this.onNotificationUpdate); this.roomProps.off(_GenericEchoChamber.PROPERTY_UPDATED, this.onRoomPropertyUpdate); this.roomProps.off("Room.name", this.onRoomNameUpdate); _CommunityPrototypeStore.CommunityPrototypeStore.instance.off(_CommunityPrototypeStore.CommunityPrototypeStore.getUpdateEventName(this.props.room.roomId), this.onCommunityUpdate); _MatrixClientPeg.MatrixClientPeg.get()?.removeListener("Room.localEchoUpdated", this.onLocalEchoUpdated); } async generatePreview() { if (!this.showMessagePreview) { return null; } const messagePreview = await _MessagePreviewStore.MessagePreviewStore.instance.getPreviewForRoom(this.props.room, this.props.tag); this.setState({ messagePreview }); } async saveNotifState(ev /*: ButtonEvent*/ , newState /*: Volume*/ ) { ev.preventDefault(); ev.stopPropagation(); if (_MatrixClientPeg.MatrixClientPeg.get().isGuest()) return; this.roomProps.notificationVolume = newState; const key = ev.key; if (key === _Keyboard.Key.ENTER) { // Implements https://www.w3.org/TR/wai-aria-practices/#keyboard-interaction-12 this.setState({ notificationsMenuPosition: null }); // hide the menu } } renderNotificationsMenu(isActive /*: boolean*/ ) /*: React.ReactElement*/ { if (_MatrixClientPeg.MatrixClientPeg.get().isGuest() || this.props.tag === _models.DefaultTagID.Archived || !this.showContextMenu || this.props.isMinimized) { // the menu makes no sense in these cases so do not show one return null; } const state = this.roomProps.notificationVolume; let contextMenu = null; if (this.state.notificationsMenuPosition) { contextMenu = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.default, (0, _extends2.default)({}, contextMenuBelow(this.state.notificationsMenuPosition), { onFinished: this.onCloseNotificationsMenu, className: "mx_RoomTile_contextMenu", compact: true }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, { first: true }, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuRadio, { label: (0, _languageHandler._t)("Use default"), active: state === _RoomNotifs.ALL_MESSAGES, iconClassName: "mx_RoomTile_iconBell", onClick: this.onClickAllNotifs }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuRadio, { label: (0, _languageHandler._t)("All messages"), active: state === _RoomNotifs.ALL_MESSAGES_LOUD, iconClassName: "mx_RoomTile_iconBellDot", onClick: this.onClickAlertMe }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuRadio, { label: (0, _languageHandler._t)("Mentions & Keywords"), active: state === _RoomNotifs.MENTIONS_ONLY, iconClassName: "mx_RoomTile_iconBellMentions", onClick: this.onClickMentions }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuRadio, { label: (0, _languageHandler._t)("None"), active: state === _RoomNotifs.MUTE, iconClassName: "mx_RoomTile_iconBellCrossed", onClick: this.onClickMute }))); } const classes = (0, _classnames.default)("mx_RoomTile_notificationsButton", { // Show bell icon for the default case too. mx_RoomTile_iconBell: state === _RoomNotifs.ALL_MESSAGES, mx_RoomTile_iconBellDot: state === _RoomNotifs.ALL_MESSAGES_LOUD, mx_RoomTile_iconBellMentions: state === _RoomNotifs.MENTIONS_ONLY, mx_RoomTile_iconBellCrossed: state === _RoomNotifs.MUTE, // Only show the icon by default if the room is overridden to muted. // TODO: [FTUE Notifications] Probably need to detect global mute state mx_RoomTile_notificationsButton_show: state === _RoomNotifs.MUTE }); return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ContextMenu.ContextMenuTooltipButton, { className: classes, onClick: this.onNotificationsMenuOpenClick, title: (0, _languageHandler._t)("Notification options"), isExpanded: !!this.state.notificationsMenuPosition, tabIndex: isActive ? 0 : -1 }), contextMenu); } renderGeneralMenu() /*: React.ReactElement*/ { if (!this.showContextMenu) return null; // no menu to show let contextMenu = null; if (this.state.generalMenuPosition && this.props.tag === _models.DefaultTagID.Archived) { contextMenu = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.default, (0, _extends2.default)({}, contextMenuBelow(this.state.generalMenuPosition), { onFinished: this.onCloseGeneralMenu, className: "mx_RoomTile_contextMenu", compact: true }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, { red: true }, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { iconClassName: "mx_RoomTile_iconSignOut", label: (0, _languageHandler._t)("Forget Room"), onClick: this.onForgetRoomClick }))); } else if (this.state.generalMenuPosition) { const roomTags = _RoomListStore.default.instance.getTagsForRoom(this.props.room); const isFavorite = roomTags.includes(_models.DefaultTagID.Favourite); const favouriteLabel = isFavorite ? (0, _languageHandler._t)("Favourited") : (0, _languageHandler._t)("Favourite"); const isLowPriority = roomTags.includes(_models.DefaultTagID.LowPriority); const lowPriorityLabel = (0, _languageHandler._t)("Low Priority"); const userId = _MatrixClientPeg.MatrixClientPeg.get().getUserId(); const canInvite = this.props.room.canInvite(userId); contextMenu = /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.default, (0, _extends2.default)({}, contextMenuBelow(this.state.generalMenuPosition), { onFinished: this.onCloseGeneralMenu, className: "mx_RoomTile_contextMenu", compact: true }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, null, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuCheckbox, { onClick: e => this.onTagRoom(e, _models.DefaultTagID.Favourite), active: isFavorite, label: favouriteLabel, iconClassName: "mx_RoomTile_iconStar" }), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuCheckbox, { onClick: e => this.onTagRoom(e, _models.DefaultTagID.LowPriority), active: isLowPriority, label: lowPriorityLabel, iconClassName: "mx_RoomTile_iconArrowDown" }), canInvite ? /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { onClick: this.onInviteClick, label: (0, _languageHandler._t)("Invite People"), iconClassName: "mx_RoomTile_iconInvite" }) : null, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { onClick: this.onOpenRoomSettings, label: (0, _languageHandler._t)("Settings"), iconClassName: "mx_RoomTile_iconSettings" })), /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOptionList, { red: true }, /*#__PURE__*/_react.default.createElement(_IconizedContextMenu.IconizedContextMenuOption, { onClick: this.onLeaveRoomClick, label: (0, _languageHandler._t)("Leave Room"), iconClassName: "mx_RoomTile_iconSignOut" }))); } return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_ContextMenu.ContextMenuTooltipButton, { className: "mx_RoomTile_menuButton", onClick: this.onGeneralMenuOpenClick, title: (0, _languageHandler._t)("Room options"), isExpanded: !!this.state.generalMenuPosition }), contextMenu); } render() /*: React.ReactElement*/ { const classes = (0, _classnames.default)({ 'mx_RoomTile': true, 'mx_RoomTile_selected': this.state.selected, 'mx_RoomTile_hasMenuOpen': !!(this.state.generalMenuPosition || this.state.notificationsMenuPosition), 'mx_RoomTile_minimized': this.props.isMinimized }); let roomProfile /*: IRoomProfile*/ = { displayName: null, avatarMxc: null }; if (this.props.tag === _models.DefaultTagID.Invite) { roomProfile = _CommunityPrototypeStore.CommunityPrototypeStore.instance.getInviteProfile(this.props.room.roomId); } let name = roomProfile.displayName || this.props.room.name; if (typeof name !== 'string') name = ''; name = name.replace(":", ":\u200b"); // add a zero-width space to allow linewrapping after the colon const roomAvatar = /*#__PURE__*/_react.default.createElement(_DecoratedRoomAvatar.default, { room: this.props.room, avatarSize: 32, displayBadge: this.props.isMinimized, oobData: { avatarUrl: roomProfile.avatarMxc } }); let badge /*: React.ReactNode*/ ; if (!this.props.isMinimized) { // aria-hidden because we summarise the unread count/highlight status in a manual aria-label below if (this.state.hasUnsentEvents) { // hardcode the badge to a danger state when there's unsent messages badge = /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomTile_badgeContainer", "aria-hidden": "true" }, /*#__PURE__*/_react.default.createElement(_NotificationBadge.default, { notification: _StaticNotificationState.StaticNotificationState.RED_EXCLAMATION, forceCount: false, roomId: this.props.room.roomId })); } else if (this.notificationState) { badge = /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomTile_badgeContainer", "aria-hidden": "true" }, /*#__PURE__*/_react.default.createElement(_NotificationBadge.default, { notification: this.notificationState, forceCount: false, roomId: this.props.room.roomId })); } } let messagePreview = null; if (this.showMessagePreview && this.state.messagePreview) { messagePreview = /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomTile_messagePreview", id: messagePreviewId(this.props.room.roomId), title: this.state.messagePreview }, this.state.messagePreview); } const nameClasses = (0, _classnames.default)({ "mx_RoomTile_name": true, "mx_RoomTile_nameWithPreview": !!messagePreview, "mx_RoomTile_nameHasUnreadEvents": this.notificationState.isUnread }); let nameContainer = /*#__PURE__*/_react.default.createElement("div", { className: "mx_RoomTile_nameContainer" }, /*#__PURE__*/_react.default.createElement("div", { title: name, className: nameClasses, tabIndex: -1, dir: "auto" }, name), messagePreview); if (this.props.isMinimized) nameContainer = null; let ariaLabel = name; // The following labels are written in such a fashion to increase screen reader efficiency (speed). if (this.props.tag === _models.DefaultTagID.Invite) {// append nothing } else if (this.notificationState.hasMentions) { ariaLabel += " " + (0, _languageHandler._t)("%(count)s unread messages including mentions.", { count: this.notificationState.count }); } else if (this.notificationState.hasUnreadCount) { ariaLabel += " " + (0, _languageHandler._t)("%(count)s unread messages.", { count: this.notificationState.count }); } else if (this.notificationState.isUnread) { ariaLabel += " " + (0, _languageHandler._t)("Unread messages."); } let ariaDescribedBy /*: string*/ ; if (this.showMessagePreview) { ariaDescribedBy = messagePreviewId(this.props.room.roomId); } const props /*: Partial<React.ComponentProps<typeof AccessibleTooltipButton>>*/ = {}; let Button /*: React.ComponentType<React.ComponentProps<typeof AccessibleButton>>*/ = _AccessibleButton.default; if (this.props.isMinimized) { Button = _AccessibleTooltipButton.default; props.title = name; // force the tooltip to hide whilst we are showing the context menu props.forceHide = !!this.state.generalMenuPosition; } return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_RovingTabIndex.RovingTabIndexWrapper, { inputRef: this.roomTileRef }, ({ onFocus, isActive, ref }) => /*#__PURE__*/_react.default.createElement(Button, (0, _extends2.default)({}, props, { onFocus: onFocus, tabIndex: isActive ? 0 : -1, inputRef: ref, className: classes, onClick: this.onTileClick, onContextMenu: this.onContextMenu, role: "treeitem", "aria-label": ariaLabel, "aria-selected": this.state.selected, "aria-describedby": ariaDescribedBy }), roomAvatar, nameContainer, badge, this.renderGeneralMenu(), this.renderNotificationsMenu(isActive)))); } }, _temp)) || _class); exports.default = RoomTile; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3ZpZXdzL3Jvb21zL1Jvb21UaWxlLnRzeCJdLCJuYW1lcyI6WyJtZXNzYWdlUHJldmlld0lkIiwicm9vbUlkIiwiY29udGV4dE1lbnVCZWxvdyIsImVsZW1lbnRSZWN0IiwibGVmdCIsIndpbmRvdyIsInBhZ2VYT2Zmc2V0IiwidG9wIiwiYm90dG9tIiwicGFnZVlPZmZzZXQiLCJjaGV2cm9uRmFjZSIsIkNoZXZyb25GYWNlIiwiTm9uZSIsIlJvb21UaWxlIiwiUmVhY3QiLCJQdXJlQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsInJvb20iLCJmb3JjZVVwZGF0ZSIsInNob3dNZXNzYWdlUHJldmlldyIsInN0YXRlIiwibWVzc2FnZVByZXZpZXciLCJnZW5lcmF0ZVByZXZpZXciLCJldiIsInNldFN0YXRlIiwiaGFzVW5zZW50RXZlbnRzIiwiY291bnRVbnNlbnRFdmVudHMiLCJwcm9wZXJ0eSIsIkNhY2hlZFJvb21LZXkiLCJOb3RpZmljYXRpb25Wb2x1bWUiLCJvbk5vdGlmaWNhdGlvblVwZGF0ZSIsInBheWxvYWQiLCJhY3Rpb24iLCJyb29tX2lkIiwic2hvd19yb29tX3RpbGUiLCJzZXRJbW1lZGlhdGUiLCJzY3JvbGxJbnRvVmlldyIsInJvb21UaWxlUmVmIiwiY3VycmVudCIsImJsb2NrIiwiYmVoYXZpb3IiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImRpcyIsImRpc3BhdGNoIiwiY2xlYXJfc2VhcmNoIiwia2V5IiwiS2V5IiwiRU5URVIiLCJTUEFDRSIsImlzQWN0aXZlIiwic2VsZWN0ZWQiLCJ0YXJnZXQiLCJub3RpZmljYXRpb25zTWVudVBvc2l0aW9uIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2VuZXJhbE1lbnVQb3NpdGlvbiIsInNob3dDb250ZXh0TWVudSIsImNsaWVudFgiLCJjbGllbnRZIiwidGFnSWQiLCJEZWZhdWx0VGFnSUQiLCJGYXZvdXJpdGUiLCJMb3dQcmlvcml0eSIsImludmVyc2VUYWciLCJpc0FwcGxpZWQiLCJSb29tTGlzdFN0b3JlIiwiaW5zdGFuY2UiLCJnZXRUYWdzRm9yUm9vbSIsImluY2x1ZGVzIiwicmVtb3ZlVGFnIiwiYWRkVGFnIiwiUm9vbUxpc3RBY3Rpb25zIiwidGFnUm9vbSIsIk1hdHJpeENsaWVudFBlZyIsImdldCIsInVuZGVmaW5lZCIsImNvbnNvbGUiLCJ3YXJuIiwic2F2ZU5vdGlmU3RhdGUiLCJBTExfTUVTU0FHRVMiLCJBTExfTUVTU0FHRVNfTE9VRCIsIk1FTlRJT05TX09OTFkiLCJNVVRFIiwiQWN0aXZlUm9vbU9ic2VydmVyIiwiYWN0aXZlUm9vbUlkIiwibm90aWZpY2F0aW9uU3RhdGUiLCJSb29tTm90aWZpY2F0aW9uU3RhdGVTdG9yZSIsImdldFJvb21TdGF0ZSIsInJvb21Qcm9wcyIsIkVjaG9DaGFtYmVyIiwiZm9yUm9vbSIsInJlc2l6ZU5vdGlmaWVyIiwib24iLCJvblJlc2l6ZSIsImxlbmd0aCIsInRhZyIsIkludml0ZSIsImlzTWluaW1pemVkIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwicHJldlN0YXRlIiwiTWVzc2FnZVByZXZpZXdTdG9yZSIsIm9mZiIsImdldFByZXZpZXdDaGFuZ2VkRXZlbnROYW1lIiwib25Sb29tUHJldmlld0NoYW5nZWQiLCJDb21tdW5pdHlQcm90b3R5cGVTdG9yZSIsImdldFVwZGF0ZUV2ZW50TmFtZSIsIm9uQ29tbXVuaXR5VXBkYXRlIiwib25Sb29tTmFtZVVwZGF0ZSIsImNvbXBvbmVudERpZE1vdW50IiwiYWRkTGlzdGVuZXIiLCJvbkFjdGl2ZVJvb21VcGRhdGUiLCJkaXNwYXRjaGVyUmVmIiwiZGVmYXVsdERpc3BhdGNoZXIiLCJyZWdpc3RlciIsIm9uQWN0aW9uIiwiTk9USUZJQ0FUSU9OX1NUQVRFX1VQREFURSIsIlBST1BFUlRZX1VQREFURUQiLCJvblJvb21Qcm9wZXJ0eVVwZGF0ZSIsIm9uTG9jYWxFY2hvVXBkYXRlZCIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVtb3ZlTGlzdGVuZXIiLCJ1bnJlZ2lzdGVyIiwiZ2V0UHJldmlld0ZvclJvb20iLCJuZXdTdGF0ZSIsImlzR3Vlc3QiLCJub3RpZmljYXRpb25Wb2x1bWUiLCJyZW5kZXJOb3RpZmljYXRpb25zTWVudSIsIkFyY2hpdmVkIiwiY29udGV4dE1lbnUiLCJvbkNsb3NlTm90aWZpY2F0aW9uc01lbnUiLCJvbkNsaWNrQWxsTm90aWZzIiwib25DbGlja0FsZXJ0TWUiLCJvbkNsaWNrTWVudGlvbnMiLCJvbkNsaWNrTXV0ZSIsImNsYXNzZXMiLCJteF9Sb29tVGlsZV9pY29uQmVsbCIsIm14X1Jvb21UaWxlX2ljb25CZWxsRG90IiwibXhfUm9vbVRpbGVfaWNvbkJlbGxNZW50aW9ucyIsIm14X1Jvb21UaWxlX2ljb25CZWxsQ3Jvc3NlZCIsIm14X1Jvb21UaWxlX25vdGlmaWNhdGlvbnNCdXR0b25fc2hvdyIsIm9uTm90aWZpY2F0aW9uc01lbnVPcGVuQ2xpY2siLCJyZW5kZXJHZW5lcmFsTWVudSIsIm9uQ2xvc2VHZW5lcmFsTWVudSIsIm9uRm9yZ2V0Um9vbUNsaWNrIiwicm9vbVRhZ3MiLCJpc0Zhdm9yaXRlIiwiZmF2b3VyaXRlTGFiZWwiLCJpc0xvd1ByaW9yaXR5IiwibG93UHJpb3JpdHlMYWJlbCIsInVzZXJJZCIsImdldFVzZXJJZCIsImNhbkludml0ZSIsImUiLCJvblRhZ1Jvb20iLCJvbkludml0ZUNsaWNrIiwib25PcGVuUm9vbVNldHRpbmdzIiwib25MZWF2ZVJvb21DbGljayIsIm9uR2VuZXJhbE1lbnVPcGVuQ2xpY2siLCJyZW5kZXIiLCJyb29tUHJvZmlsZSIsImRpc3BsYXlOYW1lIiwiYXZhdGFyTXhjIiwiZ2V0SW52aXRlUHJvZmlsZSIsIm5hbWUiLCJyZXBsYWNlIiwicm9vbUF2YXRhciIsImF2YXRhclVybCIsImJhZGdlIiwiU3RhdGljTm90aWZpY2F0aW9uU3RhdGUiLCJSRURfRVhDTEFNQVRJT04iLCJuYW1lQ2xhc3NlcyIsImlzVW5yZWFkIiwibmFtZUNvbnRhaW5lciIsImFyaWFMYWJlbCIsImhhc01lbnRpb25zIiwiY291bnQiLCJoYXNVbnJlYWRDb3VudCIsImFyaWFEZXNjcmliZWRCeSIsIkJ1dHRvbiIsIkFjY2Vzc2libGVCdXR0b24iLCJBY2Nlc3NpYmxlVG9vbHRpcEJ1dHRvbiIsInRpdGxlIiwiZm9yY2VIaWRlIiwib25Gb2N1cyIsInJlZiIsIm9uVGlsZUNsaWNrIiwib25Db250ZXh0TWVudSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBaUJBOztBQUdBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQU1BOztBQUNBOztBQUNBOztBQUNBOzs7O0FBcUJBLE1BQU1BLGdCQUFnQixHQUFHLENBQUNDO0FBQUQ7QUFBQSxLQUFxQiw4QkFBNkJBLE1BQU8sRUFBbEY7O0FBRUEsTUFBTUMsZ0JBQWdCLEdBQUcsQ0FBQ0M7QUFBRDtBQUFBLEtBQWlDO0FBQ3REO0FBQ0EsUUFBTUMsSUFBSSxHQUFHRCxXQUFXLENBQUNDLElBQVosR0FBbUJDLE1BQU0sQ0FBQ0MsV0FBMUIsR0FBd0MsQ0FBckQ7QUFDQSxRQUFNQyxHQUFHLEdBQUdKLFdBQVcsQ0FBQ0ssTUFBWixHQUFxQkgsTUFBTSxDQUFDSSxXQUE1QixHQUEwQyxFQUF0RDtBQUNBLFFBQU1DLFdBQVcsR0FBR0MseUJBQVlDLElBQWhDO0FBQ0EsU0FBTztBQUFDUixJQUFBQSxJQUFEO0FBQU9HLElBQUFBLEdBQVA7QUFBWUcsSUFBQUE7QUFBWixHQUFQO0FBQ0gsQ0FORDs7SUFTcUJHLFEsV0FEcEIsZ0RBQXFCLHNCQUFyQixDLHlCQUFELE1BQ3FCQSxRQURyQixTQUNzQ0MsZUFBTUM7QUFENUM7QUFDMEU7QUFNdEVDLEVBQUFBLFdBQVcsQ0FBQ0M7QUFBRDtBQUFBLElBQWdCO0FB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