From 5a540f5949b5c5ebf9a9f47f63adcc2d070a3bf3 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 28 Nov 2019 16:40:45 +0000 Subject: [PATCH] Migrate MemberStatusMessageAvatar over to new Context Menus Signed-off-by: Michael Telatynski <7t3chguy@gmail.com> --- .../avatars/MemberStatusMessageAvatar.js | 65 ++++++++++++------- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/src/components/views/avatars/MemberStatusMessageAvatar.js b/src/components/views/avatars/MemberStatusMessageAvatar.js index 0258c4b0c8..df84964a6e 100644 --- a/src/components/views/avatars/MemberStatusMessageAvatar.js +++ b/src/components/views/avatars/MemberStatusMessageAvatar.js @@ -14,15 +14,15 @@ See the License for the specific language governing permissions and limitations under the License. */ -import React from 'react'; +import React, {createRef} from 'react'; import PropTypes from 'prop-types'; import MatrixClientPeg from '../../../MatrixClientPeg'; import AccessibleButton from '../elements/AccessibleButton'; import MemberAvatar from '../avatars/MemberAvatar'; import classNames from 'classnames'; -import * as ContextualMenu from "../../structures/ContextualMenu"; import StatusMessageContextMenu from "../context_menus/StatusMessageContextMenu"; import SettingsStore from "../../../settings/SettingsStore"; +import {ContextMenu} from "../../structures/ContextualMenu"; export default class MemberStatusMessageAvatar extends React.Component { static propTypes = { @@ -43,7 +43,10 @@ export default class MemberStatusMessageAvatar extends React.Component { this.state = { hasStatus: this.hasStatus, + menuDisplayed: false, }; + + this._button = createRef(); } componentWillMount() { @@ -86,25 +89,12 @@ export default class MemberStatusMessageAvatar extends React.Component { }); }; - _onClick = (e) => { - e.stopPropagation(); + openMenu = () => { + this.setState({ menuDisplayed: true }); + }; - const elementRect = e.target.getBoundingClientRect(); - - const x = (elementRect.left + window.pageXOffset); - const chevronWidth = 16; // See .mx_ContextualMenu_chevron_bottom - const chevronOffset = (elementRect.width - chevronWidth) / 2; - const chevronMargin = 1; // Add some spacing away from target - const y = elementRect.top + window.pageYOffset - chevronMargin; - - ContextualMenu.createMenu(StatusMessageContextMenu, { - chevronOffset: chevronOffset, - chevronFace: 'bottom', - left: x, - top: y, - menuWidth: 226, - user: this.props.member.user, - }); + closeMenu = () => { + this.setState({ menuDisplayed: false }); }; render() { @@ -124,10 +114,35 @@ export default class MemberStatusMessageAvatar extends React.Component { "mx_MemberStatusMessageAvatar_hasStatus": this.state.hasStatus, }); - return - {avatar} - ; + let contextMenu; + if (this.state.menuDisplayed) { + const elementRect = this._button.current.getBoundingClientRect(); + + const x = (elementRect.left + window.pageXOffset); + const chevronWidth = 16; // See .mx_ContextualMenu_chevron_bottom + const chevronOffset = (elementRect.width - chevronWidth) / 2; + const chevronMargin = 1; // Add some spacing away from target + const y = elementRect.top + window.pageYOffset - chevronMargin; + + const props = { + chevronOffset: chevronOffset, + chevronFace: 'bottom', + left: x, + top: y, + menuWidth: 226, + }; + + contextMenu = + + ; + } + + return + + {avatar} + + + { contextMenu } + ; } }