@@ -15,21 +15,22 @@ See the License for the specific language governing permissions and
1515limitations under the License.
1616*/
1717
18- import React , { createRef } from 'react' ;
18+ import React from 'react' ;
1919import PropTypes from 'prop-types' ;
2020import classNames from 'classnames' ;
2121import { _t } from '../../../languageHandler' ;
2222import { MatrixClientPeg } from '../../../MatrixClientPeg' ;
2323import RateLimitedFunc from '../../../ratelimitedfunc' ;
2424
25- import { linkifyElement } from '../../../HtmlUtils' ;
2625import { CancelButton } from './SimpleRoomHeader' ;
2726import SettingsStore from "../../../settings/SettingsStore" ;
2827import RoomHeaderButtons from '../right_panel/RoomHeaderButtons' ;
2928import E2EIcon from './E2EIcon' ;
3029import DecoratedRoomAvatar from "../avatars/DecoratedRoomAvatar" ;
3130import { DefaultTagID } from "../../../stores/room-list/models" ;
3231import AccessibleTooltipButton from "../elements/AccessibleTooltipButton" ;
32+ import RoomTopic from "../elements/RoomTopic" ;
33+ import RoomName from "../elements/RoomName" ;
3334
3435export default class RoomHeader extends React . Component {
3536 static propTypes = {
@@ -52,35 +53,13 @@ export default class RoomHeader extends React.Component {
5253 onCancelClick : null ,
5354 } ;
5455
55- constructor ( props ) {
56- super ( props ) ;
57-
58- this . _topic = createRef ( ) ;
59- }
60-
6156 componentDidMount ( ) {
6257 const cli = MatrixClientPeg . get ( ) ;
6358 cli . on ( "RoomState.events" , this . _onRoomStateEvents ) ;
6459 cli . on ( "Room.accountData" , this . _onRoomAccountData ) ;
65-
66- // When a room name occurs, RoomState.events is fired *before*
67- // room.name is updated. So we have to listen to Room.name as well as
68- // RoomState.events.
69- if ( this . props . room ) {
70- this . props . room . on ( "Room.name" , this . _onRoomNameChange ) ;
71- }
72- }
73-
74- componentDidUpdate ( ) {
75- if ( this . _topic . current ) {
76- linkifyElement ( this . _topic . current ) ;
77- }
7860 }
7961
8062 componentWillUnmount ( ) {
81- if ( this . props . room ) {
82- this . props . room . removeListener ( "Room.name" , this . _onRoomNameChange ) ;
83- }
8463 const cli = MatrixClientPeg . get ( ) ;
8564 if ( cli ) {
8665 cli . removeListener ( "RoomState.events" , this . _onRoomStateEvents ) ;
@@ -109,10 +88,6 @@ export default class RoomHeader extends React.Component {
10988 this . forceUpdate ( ) ;
11089 } , 500 ) ;
11190
112- _onRoomNameChange = ( room ) => {
113- this . forceUpdate ( ) ;
114- } ;
115-
11691 _hasUnreadPins ( ) {
11792 const currentPinEvent = this . props . room . currentState . getStateEvents ( "m.room.pinned_events" , '' ) ;
11893 if ( ! currentPinEvent ) return false ;
@@ -170,29 +145,28 @@ export default class RoomHeader extends React.Component {
170145 }
171146 }
172147
173- let roomName = _t ( "Join Room" ) ;
148+ let oobName = _t ( "Join Room" ) ;
174149 if ( this . props . oobData && this . props . oobData . name ) {
175- roomName = this . props . oobData . name ;
176- } else if ( this . props . room ) {
177- roomName = this . props . room . name ;
150+ oobName = this . props . oobData . name ;
178151 }
179152
180153 const textClasses = classNames ( 'mx_RoomHeader_nametext' , { mx_RoomHeader_settingsHint : settingsHint } ) ;
181154 const name =
182155 < div className = "mx_RoomHeader_name" onClick = { this . props . onSettingsClick } >
183- < div dir = "auto" className = { textClasses } title = { roomName } > { roomName } </ div >
156+ < RoomName room = { this . props . room } >
157+ { ( name ) => {
158+ const roomName = name || oobName ;
159+ return < div dir = "auto" className = { textClasses } title = { roomName } > { roomName } </ div > ;
160+ } }
161+ </ RoomName >
184162 { searchStatus }
185163 </ div > ;
186164
187- let topic ;
188- if ( this . props . room ) {
189- const ev = this . props . room . currentState . getStateEvents ( 'm.room.topic' , '' ) ;
190- if ( ev ) {
191- topic = ev . getContent ( ) . topic ;
192- }
193- }
194- const topicElement =
195- < div className = "mx_RoomHeader_topic" ref = { this . _topic } title = { topic } dir = "auto" > { topic } </ div > ;
165+ const topicElement = < RoomTopic room = { this . props . room } >
166+ { ( topic , ref ) => < div className = "mx_RoomHeader_topic" ref = { ref } title = { topic } dir = "auto" >
167+ { topic }
168+ </ div > }
169+ </ RoomTopic > ;
196170
197171 let roomAvatar ;
198172 if ( this . props . room ) {
0 commit comments