diff --git a/src/components/structures/GroupView.js b/src/components/structures/GroupView.js index a946d16319..2e2fa25169 100644 --- a/src/components/structures/GroupView.js +++ b/src/components/structures/GroupView.js @@ -1003,9 +1003,10 @@ export default createReactClass({ this.state.inviterProfile.avatarUrl, 36, 36, ) : null; - let inviterName = group.inviter.userId; + const inviter = group.inviter || {}; + let inviterName = inviter.userId; if (this.state.inviterProfile) { - inviterName = this.state.inviterProfile.displayName || group.inviter.userId; + inviterName = this.state.inviterProfile.displayName || inviter.userId; } return
@@ -1016,7 +1017,7 @@ export default createReactClass({ height={36} /> { _t("%(inviter)s has invited you to join this community", { - inviter: inviterName, + inviter: inviterName || _t("Someone"), }) }
diff --git a/src/components/views/elements/AccessibleTooltipButton.tsx b/src/components/views/elements/AccessibleTooltipButton.tsx index 3546f62359..0388c565ad 100644 --- a/src/components/views/elements/AccessibleTooltipButton.tsx +++ b/src/components/views/elements/AccessibleTooltipButton.tsx @@ -25,6 +25,7 @@ interface ITooltipProps extends React.ComponentProps { title: string; tooltip?: React.ReactNode; tooltipClassName?: string; + forceHide?: boolean; } interface IState { @@ -39,7 +40,16 @@ export default class AccessibleTooltipButton extends React.PureComponent) { + if (!prevProps.forceHide && this.props.forceHide && this.state.hover) { + this.setState({ + hover: false, + }); + } + } + onMouseOver = () => { + if (this.props.forceHide) return; this.setState({ hover: true, }); diff --git a/src/components/views/rooms/RoomTile.tsx b/src/components/views/rooms/RoomTile.tsx index 09f201e3ef..0c99b98e1a 100644 --- a/src/components/views/rooms/RoomTile.tsx +++ b/src/components/views/rooms/RoomTile.tsx @@ -113,7 +113,7 @@ export default class RoomTile extends React.PureComponent { }; private get showContextMenu(): boolean { - return !this.props.isMinimized && this.props.tag !== DefaultTagID.Invite; + return this.props.tag !== DefaultTagID.Invite; } private get showMessagePreview(): boolean { @@ -304,7 +304,9 @@ export default class RoomTile extends React.PureComponent { private onClickMute = ev => this.saveNotifState(ev, MUTE); private renderNotificationsMenu(isActive: boolean): React.ReactElement { - if (MatrixClientPeg.get().isGuest() || this.props.tag === DefaultTagID.Archived || !this.showContextMenu) { + if (MatrixClientPeg.get().isGuest() || this.props.tag === DefaultTagID.Archived || + !this.showContextMenu || this.props.isMinimized + ) { // the menu makes no sense in these cases so do not show one return null; } @@ -530,9 +532,13 @@ export default class RoomTile extends React.PureComponent { ariaDescribedBy = messagePreviewId(this.props.room.roomId); } + const props: Partial> = {}; let Button: React.ComponentType> = AccessibleButton; if (this.props.isMinimized) { Button = AccessibleTooltipButton; + props.title = name; + // force the tooltip to hide whilst we are showing the context menu + props.forceHide = !!this.state.generalMenuPosition; } return ( @@ -540,6 +546,7 @@ export default class RoomTile extends React.PureComponent { {({onFocus, isActive, ref}) =>