mirror of
				https://github.com/vector-im/element-web.git
				synced 2025-11-04 10:11:03 +01:00 
			
		
		
		
	Hook up presence/last active up (live updating; no ticker for last active).
This commit is contained in:
		
							parent
							
								
									87dd9e8bb4
								
							
						
					
					
						commit
						08c16e0d7a
					
				@ -19,11 +19,33 @@ limitations under the License.
 | 
			
		||||
var React = require('react');
 | 
			
		||||
 | 
			
		||||
var MatrixClientPeg = require("../../../../src/MatrixClientPeg");
 | 
			
		||||
//var MemberInfoController = require("../../../../src/controllers/molecules/MemberInfo");
 | 
			
		||||
var MemberInfoController = require("../../../../src/controllers/molecules/MemberInfo");
 | 
			
		||||
 | 
			
		||||
module.exports = React.createClass({
 | 
			
		||||
    displayName: 'MemberInfo',
 | 
			
		||||
    //mixins: [MemberInfoController],
 | 
			
		||||
    mixins: [MemberInfoController],
 | 
			
		||||
 | 
			
		||||
    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 ";
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    render: function() {
 | 
			
		||||
        var power;
 | 
			
		||||
@ -31,6 +53,10 @@ module.exports = React.createClass({
 | 
			
		||||
            var img = "img/p/p" + Math.floor(20 * this.props.member.powerLevelNorm / 100) + ".png";
 | 
			
		||||
            power = <img src={ img } className="mx_MemberTile_power" width="48" height="48" alt=""/>;
 | 
			
		||||
        }
 | 
			
		||||
        var activeAgo = "unknown";
 | 
			
		||||
        if (this.state.active >= 0) {
 | 
			
		||||
            activeAgo = this.getDuration(this.state.active);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return (
 | 
			
		||||
            <div className="mx_MemberInfo">
 | 
			
		||||
@ -41,8 +67,8 @@ module.exports = React.createClass({
 | 
			
		||||
                         width="128" height="128" alt=""/>
 | 
			
		||||
                </div>
 | 
			
		||||
                <div className="mx_MemberInfo_field">{this.props.member.userId}</div>
 | 
			
		||||
                <div className="mx_MemberInfo_field">Presence: {this.props.member.presence}</div>
 | 
			
		||||
                <div className="mx_MemberInfo_field">Last active: {this.props.member.last_active_ago}</div>
 | 
			
		||||
                <div className="mx_MemberInfo_field">Presence: {this.state.presence}</div>
 | 
			
		||||
                <div className="mx_MemberInfo_field">Last active: {activeAgo}</div>
 | 
			
		||||
                <div className="mx_MemberInfo_button">Start chat</div>
 | 
			
		||||
            </div>
 | 
			
		||||
        );
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										65
									
								
								src/controllers/molecules/MemberInfo.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								src/controllers/molecules/MemberInfo.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,65 @@
 | 
			
		||||
/*
 | 
			
		||||
Copyright 2015 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.
 | 
			
		||||
*/
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * State vars:
 | 
			
		||||
 * 'presence' : string (online|offline|unavailable etc)
 | 
			
		||||
 * 'active' : number (ms ago; can be -1)
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
'use strict';
 | 
			
		||||
var MatrixClientPeg = require("../../MatrixClientPeg");
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    componentDidMount: function() {
 | 
			
		||||
        var self = this;
 | 
			
		||||
        function updateUserState(event, user) {
 | 
			
		||||
            if (!self.props.member) { return; }
 | 
			
		||||
 | 
			
		||||
            if (user.userId === self.props.member.userId) {
 | 
			
		||||
                self.setState({
 | 
			
		||||
                    presence: user.presence,
 | 
			
		||||
                    active: user.lastActiveAgo
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        MatrixClientPeg.get().on("User.presence", updateUserState);
 | 
			
		||||
        this.userPresenceFn = updateUserState;
 | 
			
		||||
 | 
			
		||||
        if (this.props.member) {
 | 
			
		||||
            var usr = MatrixClientPeg.get().getUser(this.props.member.userId);
 | 
			
		||||
            if (!usr) {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            this.setState({
 | 
			
		||||
                presence: usr.presence,
 | 
			
		||||
                active: usr.lastActiveAgo
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    componentWillUnmount: function() {
 | 
			
		||||
        MatrixClientPeg.get().removeListener("User.presence", this.userPresenceFn);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    getInitialState: function() {
 | 
			
		||||
        return {
 | 
			
		||||
            presence: "offline",
 | 
			
		||||
            active: -1
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user