@@ -19,7 +19,6 @@ import classnames from 'classnames';
1919import { MatrixEvent } from 'matrix-js-sdk/src/models/event' ;
2020
2121import * as Avatar from '../../../Avatar' ;
22- import { MatrixClientPeg } from '../../../MatrixClientPeg' ;
2322import EventTile from '../rooms/EventTile' ;
2423import SettingsStore from "../../../settings/SettingsStore" ;
2524import { Layout } from "../../../settings/Layout" ;
@@ -41,61 +40,81 @@ interface IProps {
4140 * classnames to apply to the wrapper of the preview
4241 */
4342 className : string ;
43+
44+ /**
45+ * The ID of the displayed user
46+ */
47+ userId : string ;
48+
49+ /**
50+ * The display name of the displayed user
51+ */
52+ displayName ?: string ;
53+
54+ /**
55+ * The mxc:// avatar URL of the displayed user
56+ */
57+ avatarUrl ?: string ;
58+
59+ /**
60+ * Whether the EventTile should appear faded
61+ */
62+ faded ?: boolean ;
63+
64+ /**
65+ * Callback for when the component is clicked
66+ */
67+ onClick ?: ( ) => void ;
4468}
4569
46- /* eslint-disable camelcase */
4770interface IState {
48- userId : string ;
49- displayname : string ;
50- avatar_url : string ;
71+ message : string ;
72+ faded : boolean ;
73+ eventTileKey : number ;
5174}
52- /* eslint-enable camelcase */
5375
5476const AVATAR_SIZE = 32 ;
5577
5678@replaceableComponent ( "views.elements.EventTilePreview" )
5779export default class EventTilePreview extends React . Component < IProps , IState > {
5880 constructor ( props : IProps ) {
5981 super ( props ) ;
60-
6182 this . state = {
62- userId : "@erim:fink.fink" ,
63- displayname : "Erimayas Fink" ,
64- avatar_url : null ,
83+ message : props . message ,
84+ faded : ! ! props . faded ,
85+ eventTileKey : 0 ,
6586 } ;
6687 }
6788
68- async componentDidMount ( ) {
69- // Fetch current user data
70- const client = MatrixClientPeg . get ( ) ;
71- const userId = client . getUserId ( ) ;
72- const profileInfo = await client . getProfileInfo ( userId ) ;
73- const avatarUrl = profileInfo . avatar_url ;
74-
89+ changeMessage ( message : string ) {
7590 this . setState ( {
76- userId ,
77- displayname : profileInfo . displayname ,
78- avatar_url : avatarUrl ,
91+ message ,
92+ // Change the EventTile key to force React to create a new instance
93+ eventTileKey : this . state . eventTileKey + 1 ,
7994 } ) ;
8095 }
8196
82- private fakeEvent ( { userId, displayname, avatar_url : avatarUrl } : IState ) {
97+ unfade ( ) {
98+ this . setState ( { faded : false } ) ;
99+ }
100+
101+ private fakeEvent ( { message} : IState ) {
83102 // Fake it till we make it
84103 /* eslint-disable quote-props */
85104 const rawEvent = {
86105 type : "m.room.message" ,
87- sender : userId ,
106+ sender : this . props . userId ,
88107 content : {
89108 "m.new_content" : {
90109 msgtype : "m.text" ,
91- body : this . props . message ,
92- displayname : displayname ,
93- avatar_url : avatarUrl ,
110+ body : message ,
111+ displayname : this . props . displayName ,
112+ avatar_url : this . props . avatarUrl ,
94113 } ,
95114 msgtype : "m.text" ,
96- body : this . props . message ,
97- displayname : displayname ,
98- avatar_url : avatarUrl ,
115+ body : message ,
116+ displayname : this . props . displayName ,
117+ avatar_url : this . props . avatarUrl ,
99118 } ,
100119 unsigned : {
101120 age : 97 ,
@@ -108,12 +127,15 @@ export default class EventTilePreview extends React.Component<IProps, IState> {
108127
109128 // Fake it more
110129 event . sender = {
111- name : displayname ,
112- userId : userId ,
130+ name : this . props . displayName ,
131+ userId : this . props . userId ,
113132 getAvatarUrl : ( ..._ ) => {
114- return Avatar . avatarUrlForUser ( { avatarUrl} , AVATAR_SIZE , AVATAR_SIZE , "crop" ) ;
133+ return Avatar . avatarUrlForUser (
134+ { avatarUrl : this . props . avatarUrl } ,
135+ AVATAR_SIZE , AVATAR_SIZE , "crop" ,
136+ ) ;
115137 } ,
116- getMxcAvatarUrl : ( ) => avatarUrl ,
138+ getMxcAvatarUrl : ( ) => this . props . avatarUrl ,
117139 } ;
118140
119141 return event ;
@@ -125,10 +147,12 @@ export default class EventTilePreview extends React.Component<IProps, IState> {
125147 const className = classnames ( this . props . className , {
126148 "mx_IRCLayout" : this . props . layout == Layout . IRC ,
127149 "mx_GroupLayout" : this . props . layout == Layout . Group ,
150+ "mx_EventTilePreview_faded" : this . state . faded ,
128151 } ) ;
129152
130- return < div className = { className } >
153+ return < div className = { className } onClick = { this . props . onClick } >
131154 < EventTile
155+ key = { this . state . eventTileKey }
132156 mxEvent = { event }
133157 layout = { this . props . layout }
134158 enableFlair = { SettingsStore . getValue ( UIFeature . Flair ) }
0 commit comments