+ ) */
+ })
+ }
+ }
+
+ return memberList;
},
onPopulateInvite: function(e) {
diff --git a/src/components/views/rooms/MemberTile.js b/src/components/views/rooms/MemberTile.js
index 32cc619f13..0a32441a00 100644
--- a/src/components/views/rooms/MemberTile.js
+++ b/src/components/views/rooms/MemberTile.js
@@ -26,6 +26,11 @@ var Modal = require("../../../Modal");
module.exports = React.createClass({
displayName: 'MemberTile',
+ propTypes: {
+ member: React.PropTypes.any.isRequired, // RoomMember
+ onFinished: React.PropTypes.func
+ },
+
getInitialState: function() {
return {};
},
@@ -71,37 +76,6 @@ module.exports = React.createClass({
});
},
- getDuration: function(time) {
- if (!time) return;
- var t = parseInt(time / 1000);
- var s = t % 60;
- var m = parseInt(t / 60) % 60;
- var h = parseInt(t / (60 * 60)) % 24;
- var d = parseInt(t / (60 * 60 * 24));
- if (t < 60) {
- if (t < 0) {
- return "0s";
- }
- return s + "s";
- }
- if (t < 60 * 60) {
- return m + "m";
- }
- if (t < 24 * 60 * 60) {
- return h + "h";
- }
- return d + "d ";
- },
-
- getPrettyPresence: function(user) {
- if (!user) return "Unknown";
- var presence = user.presence;
- if (presence === "online") return "Online";
- if (presence === "unavailable") return "Idle"; // XXX: is this actually right?
- if (presence === "offline") return "Offline";
- return "Unknown";
- },
-
getPowerLabel: function() {
var label = this.props.member.userId;
if (this.state.isTargetMod) {
@@ -111,6 +85,8 @@ module.exports = React.createClass({
},
render: function() {
+ var PresenceLabel = sdk.getComponent("rooms.PresenceLabel");
+
this.member_last_modified_time = this.props.member.getLastModifiedTime();
if (this.props.member.user) {
this.user_last_modified_time = this.props.member.user.getLastModifiedTime();
@@ -144,22 +120,17 @@ module.exports = React.createClass({
var nameEl;
if (this.state.hover) {
- var presence;
// FIXME: make presence data update whenever User.presence changes...
var active = this.props.member.user ? ((Date.now() - (this.props.member.user.lastPresenceTs - this.props.member.user.lastActiveAgo)) || -1) : -1;
- if (active >= 0) {
- presence = { this.getPrettyPresence(this.props.member.user) } { this.getDuration(active) } ago
;
- }
- else {
- presence = { this.getPrettyPresence(this.props.member.user) }
;
- }
- nameEl =
+ nameEl = (
{ name }
- { presence }
+
+ );
}
else {
nameEl =
diff --git a/src/components/views/rooms/PresenceLabel.js b/src/components/views/rooms/PresenceLabel.js
new file mode 100644
index 0000000000..4ecad5b3df
--- /dev/null
+++ b/src/components/views/rooms/PresenceLabel.js
@@ -0,0 +1,84 @@
+/*
+Copyright 2015, 2016 OpenMarket Ltd
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+'use strict';
+
+var React = require('react');
+
+var MatrixClientPeg = require('../../../MatrixClientPeg');
+var sdk = require('../../../index');
+
+module.exports = React.createClass({
+ displayName: 'PresenceLabel',
+
+ propTypes: {
+ activeAgo: React.PropTypes.number,
+ presenceState: React.PropTypes.string
+ },
+
+ getDefaultProps: function() {
+ return {
+ ago: -1,
+ presenceState: null
+ };
+ },
+
+ getDuration: function(time) {
+ if (!time) return;
+ var t = parseInt(time / 1000);
+ var s = t % 60;
+ var m = parseInt(t / 60) % 60;
+ var h = parseInt(t / (60 * 60)) % 24;
+ var d = parseInt(t / (60 * 60 * 24));
+ if (t < 60) {
+ if (t < 0) {
+ return "0s";
+ }
+ return s + "s";
+ }
+ if (t < 60 * 60) {
+ return m + "m";
+ }
+ if (t < 24 * 60 * 60) {
+ return h + "h";
+ }
+ return d + "d ";
+ },
+
+ getPrettyPresence: function(presence) {
+ if (presence === "online") return "Online";
+ if (presence === "unavailable") return "Idle"; // XXX: is this actually right?
+ if (presence === "offline") return "Offline";
+ return "Unknown";
+ },
+
+ render: function() {
+ if (this.props.activeAgo >= 0) {
+ return (
+
+ { this.getPrettyPresence(this.props.presenceState) } { this.getDuration(this.props.activeAgo) } ago
+
+ );
+ }
+ else {
+ return (
+
+ { this.getPrettyPresence(this.props.presenceState) }
+
+ );
+ }
+ }
+});