@@ -58,7 +58,7 @@ module.exports = React.createClass({
58
58
} ,
59
59
60
60
getInitialState : function ( ) {
61
- return { menu : false } ;
61
+ return { menu : false , allReadAvatars : false } ;
62
62
} ,
63
63
64
64
componentDidUpdate : function ( ) {
@@ -82,6 +82,12 @@ module.exports = React.createClass({
82
82
this . setState ( { menu : true } ) ;
83
83
} ,
84
84
85
+ toggleAllReadAvatars : function ( ) {
86
+ this . setState ( {
87
+ allReadAvatars : ! this . state . allReadAvatars
88
+ } ) ;
89
+ } ,
90
+
85
91
getReadAvatars : function ( ) {
86
92
var avatars = [ ] ;
87
93
@@ -136,25 +142,39 @@ module.exports = React.createClass({
136
142
} ) ;
137
143
}
138
144
145
+ var style = {
146
+ left : left + 'px' ,
147
+ top : '0px' ,
148
+ visibility : i < MAX_READ_AVATARS || this . state . allReadAvatars ? 'visible' : 'hidden'
149
+ } ;
150
+
139
151
// add to the start so the most recent is on the end (ie. ends up rightmost)
140
152
avatars . unshift (
141
153
< MemberAvatar key = { member . userId } member = { member }
142
154
width = { 14 } height = { 14 } resizeMethod = "crop"
143
- style = { { left : left + 'px' , top : '0px' } }
155
+ style = { style }
144
156
startStyle = { startStyles }
145
157
enterTransitionOpts = { enterTransitionOpts }
146
158
id = { 'mx_readAvatar' + member . userId }
159
+ onClick = { this . toggleAllReadAvatars }
147
160
/>
148
161
) ;
149
- left -= 15 ;
150
- if ( i + 1 >= MAX_READ_AVATARS ) {
151
- break ;
162
+ // TODO: we keep the extra read avatars in the dom to make animation simpler
163
+ // we could optimise this to reduce the dom size.
164
+ if ( i < MAX_READ_AVATARS - 1 || this . state . allReadAvatars ) {
165
+ left -= 15 ;
152
166
}
153
167
}
154
- var remainder = receipts . length - MAX_READ_AVATARS ;
155
- var remText ;
156
- if ( remainder > 0 ) {
157
- remText = < span className = "mx_EventTile_readAvatarRemainder" style = { { left : left } } > +{ remainder } </ span > ;
168
+ if ( ! this . state . allReadAvatars ) {
169
+ var remainder = receipts . length - MAX_READ_AVATARS ;
170
+ var remText ;
171
+ left -= 15 ;
172
+ if ( remainder > 0 ) {
173
+ remText = < span className = "mx_EventTile_readAvatarRemainder"
174
+ onClick = { this . toggleAllReadAvatars }
175
+ style = { { left : left } } > +{ remainder }
176
+ </ span > ;
177
+ }
158
178
}
159
179
160
180
return < span className = "mx_EventTile_readAvatars" ref = { this . collectReadAvatarNode } >
0 commit comments