From 4e7fd55fb459e2e6fd539b6bcf6527eec7e2db9f Mon Sep 17 00:00:00 2001 From: Richard van der Hoff Date: Fri, 17 Nov 2017 14:35:33 +0000 Subject: [PATCH 1/3] MemberPresenceAvatar: fix null references avoid assuming that `member` has a `user` --- .../views/avatars/MemberPresenceAvatar.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/components/views/avatars/MemberPresenceAvatar.js b/src/components/views/avatars/MemberPresenceAvatar.js index 648b798b67..091ed15e75 100644 --- a/src/components/views/avatars/MemberPresenceAvatar.js +++ b/src/components/views/avatars/MemberPresenceAvatar.js @@ -44,8 +44,15 @@ module.exports = React.createClass({ }, getInitialState: function() { - const presenceState = this.props.member.user.presence; - const presenceMessage = this.props.member.user.presenceStatusMsg; + let presenceState = null; + let presenceMessage = null; + + // RoomMembers do not necessarily have a user. + if (this.props.member.user) { + presenceState = this.props.member.user.presence; + presenceMessage = this.props.member.user.presenceStatusMsg; + } + return { status: presenceState, message: presenceMessage, @@ -109,6 +116,8 @@ module.exports = React.createClass({ }); e.stopPropagation(); + + // XXX NB the following assumes that user is non-null, which is not valid // const presenceState = this.props.member.user.presence; // const presenceLastActiveAgo = this.props.member.user.lastActiveAgo; // const presenceLastTs = this.props.member.user.lastPresenceTs; From 28ff0a4ee7cb49d706fec24d0707076efb5febed Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Fri, 17 Nov 2017 22:25:15 -0700 Subject: [PATCH 2/3] Disable presence controls if there's no presence Signed-off-by: Travis Ralston --- src/components/views/avatars/MemberPresenceAvatar.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/components/views/avatars/MemberPresenceAvatar.js b/src/components/views/avatars/MemberPresenceAvatar.js index 091ed15e75..81f16abdf2 100644 --- a/src/components/views/avatars/MemberPresenceAvatar.js +++ b/src/components/views/avatars/MemberPresenceAvatar.js @@ -25,6 +25,7 @@ import dispatcher from "../../../dispatcher"; import * as ContextualMenu from "../../structures/ContextualMenu"; import SettingsStore from "../../../settings/SettingsStore"; +// This is just an avatar with a presence indicator for the user on it. module.exports = React.createClass({ displayName: 'MemberPresenceAvatar', @@ -142,7 +143,8 @@ module.exports = React.createClass({ ); // LABS: Disable presence management functions for now - if (!SettingsStore.isFeatureEnabled("feature_presence_management")) { + // Also disable the presence information if there's no status information + if (!SettingsStore.isFeatureEnabled("feature_presence_management") || !this.state.status) { statusNode = null; onClickFn = null; } From 5f3fda2950c6fc7a7635661969b59eee1016333a Mon Sep 17 00:00:00 2001 From: Travis Ralston Date: Tue, 21 Nov 2017 09:01:56 -0700 Subject: [PATCH 3/3] Update MemberPresenceAvatar.js Signed-off-by: Travis Ralston --- src/components/views/avatars/MemberPresenceAvatar.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/views/avatars/MemberPresenceAvatar.js b/src/components/views/avatars/MemberPresenceAvatar.js index 81f16abdf2..49cfee2cff 100644 --- a/src/components/views/avatars/MemberPresenceAvatar.js +++ b/src/components/views/avatars/MemberPresenceAvatar.js @@ -25,7 +25,7 @@ import dispatcher from "../../../dispatcher"; import * as ContextualMenu from "../../structures/ContextualMenu"; import SettingsStore from "../../../settings/SettingsStore"; -// This is just an avatar with a presence indicator for the user on it. +// This is an avatar with presence information and controls on it. module.exports = React.createClass({ displayName: 'MemberPresenceAvatar',