@@ -16,6 +16,7 @@ limitations under the License.
1616
1717import React , { createRef } from "react" ;
1818import classNames from "classnames" ;
19+ import { EventType } from "matrix-js-sdk/src/matrix" ;
1920
2021import { _t } from "../../../languageHandler" ;
2122import { MatrixClientPeg } from "../../../MatrixClientPeg" ;
@@ -33,9 +34,9 @@ interface IProps {
3334interface IState {
3435 originalDisplayName : string ;
3536 displayName : string ;
36- originalAvatarUrl : string ;
37- avatarUrl : string ;
38- avatarFile : File ;
37+ originalAvatarUrl : string | null ;
38+ avatarUrl : string | null ;
39+ avatarFile : File | null ;
3940 originalTopic : string ;
4041 topic : string ;
4142 profileFieldsTouched : Record < string , boolean > ;
@@ -55,16 +56,17 @@ export default class RoomProfileSettings extends React.Component<IProps, IState>
5556 const room = client . getRoom ( props . roomId ) ;
5657 if ( ! room ) throw new Error ( `Expected a room for ID: ${ props . roomId } ` ) ;
5758
58- const avatarEvent = room . currentState . getStateEvents ( "m.room.avatar" , "" ) ;
59- let avatarUrl = avatarEvent && avatarEvent . getContent ( ) ? avatarEvent . getContent ( ) [ "url" ] : null ;
59+ const avatarEvent = room . currentState . getStateEvents ( EventType . RoomAvatar , "" ) ;
60+ let avatarUrl = avatarEvent ? .getContent ( ) [ "url" ] ?? null ;
6061 if ( avatarUrl ) avatarUrl = mediaFromMxc ( avatarUrl ) . getSquareThumbnailHttp ( 96 ) ;
6162
62- const topicEvent = room . currentState . getStateEvents ( "m.room.topic" , "" ) ;
63+ const topicEvent = room . currentState . getStateEvents ( EventType . RoomTopic , "" ) ;
6364 const topic = topicEvent && topicEvent . getContent ( ) ? topicEvent . getContent ( ) [ "topic" ] : "" ;
6465
65- const nameEvent = room . currentState . getStateEvents ( "m.room.name" , "" ) ;
66+ const nameEvent = room . currentState . getStateEvents ( EventType . RoomName , "" ) ;
6667 const name = nameEvent && nameEvent . getContent ( ) ? nameEvent . getContent ( ) [ "name" ] : "" ;
6768
69+ const userId = client . getSafeUserId ( ) ;
6870 this . state = {
6971 originalDisplayName : name ,
7072 displayName : name ,
@@ -74,19 +76,19 @@ export default class RoomProfileSettings extends React.Component<IProps, IState>
7476 originalTopic : topic ,
7577 topic : topic ,
7678 profileFieldsTouched : { } ,
77- canSetName : room . currentState . maySendStateEvent ( "m.room.name" , client . getUserId ( ) ) ,
78- canSetTopic : room . currentState . maySendStateEvent ( "m.room.topic" , client . getUserId ( ) ) ,
79- canSetAvatar : room . currentState . maySendStateEvent ( "m.room.avatar" , client . getUserId ( ) ) ,
79+ canSetName : room . currentState . maySendStateEvent ( EventType . RoomName , userId ) ,
80+ canSetTopic : room . currentState . maySendStateEvent ( EventType . RoomTopic , userId ) ,
81+ canSetAvatar : room . currentState . maySendStateEvent ( EventType . RoomAvatar , userId ) ,
8082 } ;
8183 }
8284
8385 private uploadAvatar = ( ) : void => {
84- this . avatarUpload . current . click ( ) ;
86+ this . avatarUpload . current ? .click ( ) ;
8587 } ;
8688
8789 private removeAvatar = ( ) : void => {
8890 // clear file upload field so same file can be selected
89- this . avatarUpload . current . value = "" ;
91+ if ( this . avatarUpload . current ) this . avatarUpload . current . value = "" ;
9092 this . setState ( {
9193 avatarUrl : null ,
9294 avatarFile : null ,
@@ -135,12 +137,12 @@ export default class RoomProfileSettings extends React.Component<IProps, IState>
135137
136138 if ( this . state . avatarFile ) {
137139 const { content_uri : uri } = await client . uploadContent ( this . state . avatarFile ) ;
138- await client . sendStateEvent ( this . props . roomId , "m.room.avatar" , { url : uri } , "" ) ;
140+ await client . sendStateEvent ( this . props . roomId , EventType . RoomAvatar , { url : uri } , "" ) ;
139141 newState . avatarUrl = mediaFromMxc ( uri ) . getSquareThumbnailHttp ( 96 ) ;
140142 newState . originalAvatarUrl = newState . avatarUrl ;
141143 newState . avatarFile = null ;
142144 } else if ( this . state . originalAvatarUrl !== this . state . avatarUrl ) {
143- await client . sendStateEvent ( this . props . roomId , "m.room.avatar" , { } , "" ) ;
145+ await client . sendStateEvent ( this . props . roomId , EventType . RoomAvatar , { } , "" ) ;
144146 }
145147
146148 if ( this . state . originalTopic !== this . state . topic ) {
@@ -207,7 +209,7 @@ export default class RoomProfileSettings extends React.Component<IProps, IState>
207209 const reader = new FileReader ( ) ;
208210 reader . onload = ( ev ) => {
209211 this . setState ( {
210- avatarUrl : String ( ev . target . result ) ,
212+ avatarUrl : String ( ev . target ? .result ) ,
211213 avatarFile : file ,
212214 profileFieldsTouched : {
213215 ...this . state . profileFieldsTouched ,
@@ -269,7 +271,7 @@ export default class RoomProfileSettings extends React.Component<IProps, IState>
269271 />
270272 </ div >
271273 < AvatarSetting
272- avatarUrl = { this . state . avatarUrl }
274+ avatarUrl = { this . state . avatarUrl ?? undefined }
273275 avatarName = { this . state . displayName || this . props . roomId }
274276 avatarAltText = { _t ( "Room avatar" ) }
275277 uploadAvatar = { this . state . canSetAvatar ? this . uploadAvatar : undefined }
0 commit comments