@@ -17,20 +17,33 @@ limitations under the License.
17
17
18
18
import SettingsStore from "../../../settings/SettingsStore" ;
19
19
import React from 'react' ;
20
- import PropTypes from 'prop-types' ;
21
- import * as sdk from "../../../index" ;
22
20
import dis from "../../../dispatcher/dispatcher" ;
23
21
import { _t } from '../../../languageHandler' ;
24
22
import { MatrixClientPeg } from "../../../MatrixClientPeg" ;
25
23
import { Action } from "../../../dispatcher/actions" ;
26
- import { replaceableComponent } from "../../../utils/replaceableComponent" ;
24
+ import { replaceableComponent } from "../../../utils/replaceableComponent" ;
25
+ import { RoomMember } from "matrix-js-sdk/src/models/room-member" ;
26
+ import { MatrixEvent } from "matrix-js-sdk/src/models/event" ;
27
+ import { EventType } from "matrix-js-sdk/src/@types/event" ;
28
+ import { DeviceInfo } from "matrix-js-sdk/src/crypto/deviceinfo" ;
29
+ import EntityTile , { PowerStatus } from "./EntityTile" ;
30
+ import MemberAvatar from "./../avatars/MemberAvatar" ;
31
+
32
+ interface IProps {
33
+ member : RoomMember ;
34
+ showPresence ?: boolean ;
35
+ }
36
+
37
+ interface IState {
38
+ statusMessage : string ;
39
+ isRoomEncrypted : boolean ;
40
+ e2eStatus : string ;
41
+ }
27
42
28
43
@replaceableComponent ( "views.rooms.MemberTile" )
29
- export default class MemberTile extends React . Component {
30
- static propTypes = {
31
- member : PropTypes . any . isRequired , // RoomMember
32
- showPresence : PropTypes . bool ,
33
- } ;
44
+ export default class MemberTile extends React . Component < IProps , IState > {
45
+ private userLastModifiedTime : number ;
46
+ private memberLastModifiedTime : number ;
34
47
35
48
static defaultProps = {
36
49
showPresence : true ,
@@ -52,7 +65,7 @@ export default class MemberTile extends React.Component {
52
65
if ( SettingsStore . getValue ( "feature_custom_status" ) ) {
53
66
const { user } = this . props . member ;
54
67
if ( user ) {
55
- user . on ( "User._unstable_statusMessage" , this . _onStatusMessageCommitted ) ;
68
+ user . on ( "User._unstable_statusMessage" , this . onStatusMessageCommitted ) ;
56
69
}
57
70
}
58
71
@@ -80,7 +93,7 @@ export default class MemberTile extends React.Component {
80
93
if ( user ) {
81
94
user . removeListener (
82
95
"User._unstable_statusMessage" ,
83
- this . _onStatusMessageCommitted ,
96
+ this . onStatusMessageCommitted ,
84
97
) ;
85
98
}
86
99
@@ -91,8 +104,8 @@ export default class MemberTile extends React.Component {
91
104
}
92
105
}
93
106
94
- onRoomStateEvents = ev => {
95
- if ( ev . getType ( ) !== "m.room.encryption" ) return ;
107
+ private onRoomStateEvents = ( ev : MatrixEvent ) : void => {
108
+ if ( ev . getType ( ) !== EventType . RoomEncryption ) return ;
96
109
const { roomId } = this . props . member ;
97
110
if ( ev . getRoomId ( ) !== roomId ) return ;
98
111
@@ -105,17 +118,17 @@ export default class MemberTile extends React.Component {
105
118
this . updateE2EStatus ( ) ;
106
119
} ;
107
120
108
- onUserTrustStatusChanged = ( userId , trustStatus ) => {
121
+ private onUserTrustStatusChanged = ( userId : string , trustStatus : string ) : void => {
109
122
if ( userId !== this . props . member . userId ) return ;
110
123
this . updateE2EStatus ( ) ;
111
124
} ;
112
125
113
- onDeviceVerificationChanged = ( userId , deviceId , deviceInfo ) => {
126
+ private onDeviceVerificationChanged = ( userId : string , deviceId : string , deviceInfo : DeviceInfo ) : void => {
114
127
if ( userId !== this . props . member . userId ) return ;
115
128
this . updateE2EStatus ( ) ;
116
129
} ;
117
130
118
- async updateE2EStatus ( ) {
131
+ private async updateE2EStatus ( ) : Promise < void > {
119
132
const cli = MatrixClientPeg . get ( ) ;
120
133
const { userId } = this . props . member ;
121
134
const isMe = userId === cli . getUserId ( ) ;
@@ -143,32 +156,32 @@ export default class MemberTile extends React.Component {
143
156
} ) ;
144
157
}
145
158
146
- getStatusMessage ( ) {
159
+ private getStatusMessage ( ) : string {
147
160
const { user } = this . props . member ;
148
161
if ( ! user ) {
149
162
return "" ;
150
163
}
151
- return user . _unstable_statusMessage ;
164
+ return user . unstable_statusMessage ;
152
165
}
153
166
154
- _onStatusMessageCommitted = ( ) => {
167
+ private onStatusMessageCommitted = ( ) : void => {
155
168
// The `User` object has observed a status message change.
156
169
this . setState ( {
157
170
statusMessage : this . getStatusMessage ( ) ,
158
171
} ) ;
159
172
} ;
160
173
161
- shouldComponentUpdate ( nextProps , nextState ) {
174
+ shouldComponentUpdate ( nextProps : IProps , nextState : IState ) : boolean {
162
175
if (
163
- this . member_last_modified_time === undefined ||
164
- this . member_last_modified_time < nextProps . member . getLastModifiedTime ( )
176
+ this . memberLastModifiedTime === undefined ||
177
+ this . memberLastModifiedTime < nextProps . member . getLastModifiedTime ( )
165
178
) {
166
179
return true ;
167
180
}
168
181
if (
169
182
nextProps . member . user &&
170
- ( this . user_last_modified_time === undefined ||
171
- this . user_last_modified_time < nextProps . member . user . getLastModifiedTime ( ) )
183
+ ( this . userLastModifiedTime === undefined ||
184
+ this . userLastModifiedTime < nextProps . member . user . getLastModifiedTime ( ) )
172
185
) {
173
186
return true ;
174
187
}
@@ -181,30 +194,27 @@ export default class MemberTile extends React.Component {
181
194
return false ;
182
195
}
183
196
184
- onClick = e => {
197
+ private onClick = ( ) : void => {
185
198
dis . dispatch ( {
186
199
action : Action . ViewUser ,
187
200
member : this . props . member ,
188
201
} ) ;
189
202
} ;
190
203
191
- _getDisplayName ( ) {
204
+ private getDisplayName ( ) : string {
192
205
return this . props . member . name ;
193
206
}
194
207
195
- getPowerLabel ( ) {
208
+ private getPowerLabel ( ) : string {
196
209
return _t ( "%(userName)s (power %(powerLevelNumber)s)" , {
197
210
userName : this . props . member . userId ,
198
211
powerLevelNumber : this . props . member . powerLevel ,
199
212
} ) ;
200
213
}
201
214
202
215
render ( ) {
203
- const MemberAvatar = sdk . getComponent ( 'avatars.MemberAvatar' ) ;
204
- const EntityTile = sdk . getComponent ( 'rooms.EntityTile' ) ;
205
-
206
216
const member = this . props . member ;
207
- const name = this . _getDisplayName ( ) ;
217
+ const name = this . getDisplayName ( ) ;
208
218
const presenceState = member . user ? member . user . presence : null ;
209
219
210
220
let statusMessage = null ;
@@ -217,13 +227,13 @@ export default class MemberTile extends React.Component {
217
227
) ;
218
228
219
229
if ( member . user ) {
220
- this . user_last_modified_time = member . user . getLastModifiedTime ( ) ;
230
+ this . userLastModifiedTime = member . user . getLastModifiedTime ( ) ;
221
231
}
222
- this . member_last_modified_time = member . getLastModifiedTime ( ) ;
232
+ this . memberLastModifiedTime = member . getLastModifiedTime ( ) ;
223
233
224
234
const powerStatusMap = new Map ( [
225
- [ 100 , EntityTile . POWER_STATUS_ADMIN ] ,
226
- [ 50 , EntityTile . POWER_STATUS_MODERATOR ] ,
235
+ [ 100 , PowerStatus . Admin ] ,
236
+ [ 50 , PowerStatus . Moderator ] ,
227
237
] ) ;
228
238
229
239
// Find the nearest power level with a badge
0 commit comments