mirror of https://github.com/vector-im/riot-web
				
				
				
			Merge pull request #643 from matrix-org/luke/fix-typing-indication
Sync typing indication with avatar typing indicationpull/21833/head
						commit
						f66e412d3a
					
				|  | @ -32,17 +32,24 @@ module.exports = { | |||
|         return whoIsTyping; | ||||
|     }, | ||||
| 
 | ||||
|     whoIsTypingString: function(room) { | ||||
|         var whoIsTyping = this.usersTypingApartFromMe(room); | ||||
|     whoIsTypingString: function(room, limit) { | ||||
|         const whoIsTyping = this.usersTypingApartFromMe(room); | ||||
|         const othersCount = limit === undefined ? | ||||
|             0 : Math.max(whoIsTyping.length - limit, 0); | ||||
|         if (whoIsTyping.length == 0) { | ||||
|             return null; | ||||
|             return ''; | ||||
|         } else if (whoIsTyping.length == 1) { | ||||
|             return whoIsTyping[0].name + ' is typing'; | ||||
|         } | ||||
|         const names = whoIsTyping.map(function(m) { | ||||
|             return m.name; | ||||
|         }); | ||||
|         if (othersCount) { | ||||
|             const other = ' other' + (othersCount > 1 ? 's' : ''); | ||||
|             return names.slice(0, limit).join(', ') + ' and ' + | ||||
|                 othersCount + other + ' are typing'; | ||||
|         } else { | ||||
|             var names = whoIsTyping.map(function(m) { | ||||
|                 return m.name; | ||||
|             }); | ||||
|             var lastPerson = names.shift(); | ||||
|             const lastPerson = names.pop(); | ||||
|             return names.join(', ') + ' and ' + lastPerson + ' are typing'; | ||||
|         } | ||||
|     } | ||||
|  |  | |||
|  | @ -21,8 +21,6 @@ var WhoIsTyping = require("../../WhoIsTyping"); | |||
| var MatrixClientPeg = require("../../MatrixClientPeg"); | ||||
| const MemberAvatar = require("../views/avatars/MemberAvatar"); | ||||
| 
 | ||||
| const TYPING_AVATARS_LIMIT = 2; | ||||
| 
 | ||||
| const HIDE_DEBOUNCE_MS = 10000; | ||||
| const STATUS_BAR_HIDDEN = 0; | ||||
| const STATUS_BAR_EXPANDED = 1; | ||||
|  | @ -53,6 +51,10 @@ module.exports = React.createClass({ | |||
|         // more interesting)
 | ||||
|         hasActiveCall: React.PropTypes.bool, | ||||
| 
 | ||||
|         // Number of names to display in typing indication. E.g. set to 3, will
 | ||||
|         // result in "X, Y, Z and 100 others are typing."
 | ||||
|         whoIsTypingLimit: React.PropTypes.number, | ||||
| 
 | ||||
|         // callback for when the user clicks on the 'resend all' button in the
 | ||||
|         // 'unsent messages' bar
 | ||||
|         onResendAllClick: React.PropTypes.func, | ||||
|  | @ -77,10 +79,19 @@ module.exports = React.createClass({ | |||
|         onVisible: React.PropTypes.func, | ||||
|     }, | ||||
| 
 | ||||
|     getDefaultProps: function() { | ||||
|         return { | ||||
|             whoIsTypingLimit: 2, | ||||
|         }; | ||||
|     }, | ||||
| 
 | ||||
|     getInitialState: function() { | ||||
|         return { | ||||
|             syncState: MatrixClientPeg.get().getSyncState(), | ||||
|             whoisTypingString: WhoIsTyping.whoIsTypingString(this.props.room), | ||||
|             whoisTypingString: WhoIsTyping.whoIsTypingString( | ||||
|                 this.props.room, | ||||
|                 this.props.whoIsTypingLimit | ||||
|             ), | ||||
|         }; | ||||
|     }, | ||||
| 
 | ||||
|  | @ -127,7 +138,10 @@ module.exports = React.createClass({ | |||
| 
 | ||||
|     onRoomMemberTyping: function(ev, member) { | ||||
|         this.setState({ | ||||
|             whoisTypingString: WhoIsTyping.whoIsTypingString(this.props.room), | ||||
|             whoisTypingString: WhoIsTyping.whoIsTypingString( | ||||
|                 this.props.room, | ||||
|                 this.props.whoIsTypingLimit | ||||
|             ), | ||||
|         }); | ||||
|     }, | ||||
| 
 | ||||
|  | @ -194,7 +208,7 @@ module.exports = React.createClass({ | |||
|         if (wantPlaceholder) { | ||||
|             return ( | ||||
|                 <div className="mx_RoomStatusBar_typingIndicatorAvatars"> | ||||
|                     {this._renderTypingIndicatorAvatars(TYPING_AVATARS_LIMIT)} | ||||
|                     {this._renderTypingIndicatorAvatars(this.props.whoIsTypingLimit)} | ||||
|                 </div> | ||||
|             ); | ||||
|         } | ||||
|  |  | |||
|  | @ -1531,6 +1531,7 @@ module.exports = React.createClass({ | |||
|                 onResize={this.onChildResize} | ||||
|                 onVisible={this.onStatusBarVisible} | ||||
|                 onHidden={this.onStatusBarHidden} | ||||
|                 whoIsTypingLimit={2} | ||||
|             />; | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 David Baker
						David Baker