@@ -57,6 +57,9 @@ import { isVideoRoom } from "../../../utils/video-rooms";
57
57
import { notificationLevelToIndicator } from "../../../utils/notifications" ;
58
58
import { CallGuestLinkButton } from "./RoomHeader/CallGuestLinkButton" ;
59
59
import { ButtonEvent } from "../elements/AccessibleButton" ;
60
+ import { ReleaseAnnouncement } from "../../structures/ReleaseAnnouncement" ;
61
+ import { useIsReleaseAnnouncementOpen } from "../../../hooks/useIsReleaseAnnouncementOpen" ;
62
+ import { ReleaseAnnouncementStore } from "../../../stores/ReleaseAnnouncementStore" ;
60
63
61
64
export default function RoomHeader ( {
62
65
room,
@@ -238,74 +241,87 @@ export default function RoomHeader({
238
241
voiceCallButton = undefined ;
239
242
}
240
243
244
+ const isReleaseAnnouncementOpen = useIsReleaseAnnouncementOpen ( "newRoomHeader" ) ;
245
+
241
246
return (
242
247
< >
243
248
< Flex as = "header" align = "center" gap = "var(--cpd-space-3x)" className = "mx_RoomHeader light-panel" >
244
- < button
245
- aria-label = { _t ( "right_panel|room_summary_card|title" ) }
246
- tabIndex = { 0 }
247
- onClick = { ( ) => {
248
- RightPanelStore . instance . showOrHidePanel ( RightPanelPhases . RoomSummary ) ;
249
- } }
250
- className = "mx_RoomHeader_infoWrapper"
249
+ < ReleaseAnnouncement
250
+ feature = "newRoomHeader"
251
+ header = { _t ( "room|header|release_announcement_header" ) }
252
+ description = { _t ( "room|header|release_announcement_description" ) }
253
+ closeLabel = { _t ( "action|ok" ) }
254
+ placement = "bottom"
251
255
>
252
- < RoomAvatar room = { room } size = "40px" />
253
- < Box flex = "1" className = "mx_RoomHeader_info" >
254
- < BodyText
255
- as = "div"
256
- size = "lg"
257
- weight = "semibold"
258
- dir = "auto"
259
- role = "heading"
260
- aria-level = { 1 }
261
- className = "mx_RoomHeader_heading"
262
- >
263
- < span className = "mx_RoomHeader_truncated mx_lineClamp" > { roomName } </ span >
264
-
265
- { ! isDirectMessage && roomState . getJoinRule ( ) === JoinRule . Public && (
266
- < Tooltip label = { _t ( "common|public_room" ) } placement = "right" >
267
- < PublicIcon
268
- width = "16px"
269
- height = "16px"
270
- className = "mx_RoomHeader_icon text-secondary"
271
- aria-label = { _t ( "common|public_room" ) }
272
- />
273
- </ Tooltip >
274
- ) }
275
-
276
- { isDirectMessage && e2eStatus === E2EStatus . Verified && (
277
- < Tooltip label = { _t ( "common|verified" ) } placement = "right" >
278
- < VerifiedIcon
279
- width = "16px"
280
- height = "16px"
281
- className = "mx_RoomHeader_icon mx_Verified"
282
- aria-label = { _t ( "common|verified" ) }
283
- />
284
- </ Tooltip >
285
- ) }
286
-
287
- { isDirectMessage && e2eStatus === E2EStatus . Warning && (
288
- < Tooltip label = { _t ( "room|header_untrusted_label" ) } placement = "right" >
289
- < ErrorIcon
290
- width = "16px"
291
- height = "16px"
292
- className = "mx_RoomHeader_icon mx_Untrusted"
293
- aria-label = { _t ( "room|header_untrusted_label" ) }
294
- />
295
- </ Tooltip >
296
- ) }
297
- </ BodyText >
298
- { roomTopic && (
256
+ < button
257
+ aria-label = { _t ( "right_panel|room_summary_card|title" ) }
258
+ tabIndex = { 0 }
259
+ onClick = { ( ) => {
260
+ if ( isReleaseAnnouncementOpen ) {
261
+ ReleaseAnnouncementStore . instance . nextReleaseAnnouncement ( ) ;
262
+ }
263
+ RightPanelStore . instance . showOrHidePanel ( RightPanelPhases . RoomSummary ) ;
264
+ } }
265
+ className = "mx_RoomHeader_infoWrapper"
266
+ >
267
+ < RoomAvatar room = { room } size = "40px" />
268
+ < Box flex = "1" className = "mx_RoomHeader_info" >
299
269
< BodyText
300
270
as = "div"
301
- size = "sm"
302
- className = "mx_RoomHeader_topic mx_RoomHeader_truncated mx_lineClamp"
271
+ size = "lg"
272
+ weight = "semibold"
273
+ dir = "auto"
274
+ role = "heading"
275
+ aria-level = { 1 }
276
+ className = "mx_RoomHeader_heading"
303
277
>
304
- < Linkify > { roomTopicBody } </ Linkify >
278
+ < span className = "mx_RoomHeader_truncated mx_lineClamp" > { roomName } </ span >
279
+
280
+ { ! isDirectMessage && roomState . getJoinRule ( ) === JoinRule . Public && (
281
+ < Tooltip label = { _t ( "common|public_room" ) } placement = "right" >
282
+ < PublicIcon
283
+ width = "16px"
284
+ height = "16px"
285
+ className = "mx_RoomHeader_icon text-secondary"
286
+ aria-label = { _t ( "common|public_room" ) }
287
+ />
288
+ </ Tooltip >
289
+ ) }
290
+
291
+ { isDirectMessage && e2eStatus === E2EStatus . Verified && (
292
+ < Tooltip label = { _t ( "common|verified" ) } placement = "right" >
293
+ < VerifiedIcon
294
+ width = "16px"
295
+ height = "16px"
296
+ className = "mx_RoomHeader_icon mx_Verified"
297
+ aria-label = { _t ( "common|verified" ) }
298
+ />
299
+ </ Tooltip >
300
+ ) }
301
+
302
+ { isDirectMessage && e2eStatus === E2EStatus . Warning && (
303
+ < Tooltip label = { _t ( "room|header_untrusted_label" ) } placement = "right" >
304
+ < ErrorIcon
305
+ width = "16px"
306
+ height = "16px"
307
+ className = "mx_RoomHeader_icon mx_Untrusted"
308
+ aria-label = { _t ( "room|header_untrusted_label" ) }
309
+ />
310
+ </ Tooltip >
311
+ ) }
305
312
</ BodyText >
306
- ) }
307
- </ Box >
308
- </ button >
313
+ { roomTopic && (
314
+ < BodyText
315
+ as = "div"
316
+ size = "sm"
317
+ className = "mx_RoomHeader_topic mx_RoomHeader_truncated mx_lineClamp"
318
+ >
319
+ < Linkify > { roomTopicBody } </ Linkify >
320
+ </ BodyText >
321
+ ) }
322
+ </ Box >
323
+ </ button >
324
+ </ ReleaseAnnouncement >
309
325
< Flex align = "center" gap = "var(--cpd-space-2x)" >
310
326
{ additionalButtons ?. map ( ( props ) => {
311
327
const label = props . label ( ) ;
0 commit comments