@@ -10,7 +10,6 @@ import {
1010 captionsBannerClassName ,
1111 captionsBannerFullHeightClassName ,
1212 captionsContainerClassName ,
13- hiddenAnnouncementClassName ,
1413 loadingBannerFullHeightStyles ,
1514 loadingBannerStyles
1615} from './styles/Captions.style' ;
@@ -27,7 +26,7 @@ import {
2726} from './styles/Captions.style' ;
2827import { titleClassName } from './styles/CaptionsSettingsModal.styles' ;
2928import { Text , IconButton } from '@fluentui/react' ;
30-
29+ import { _CaptionsAndRTTAnnouncer } from './CaptionsAndRTTAnnouncer' ;
3130/**
3231 * @public
3332 * information required for each line of caption
@@ -243,10 +242,6 @@ export const CaptionsBanner = (props: CaptionsBannerProps): JSX.Element => {
243242 const theme = useTheme ( ) ;
244243
245244 const [ expandBannerHeight , setExpandBannerHeight ] = useState < boolean > ( false ) ;
246- const [ announcedRTT , setAnnouncedRTT ] = useState < number [ ] > ( [ ] ) ;
247- const [ announcedCaption , setAnnouncedCaption ] = useState < string [ ] > ( [ ] ) ;
248- const [ captionAnnouncementText , setCaptionAnnouncementText ] = useState < CaptionsInformation [ ] > ( [ ] ) ;
249- const [ rttAnnouncementText , setRTTAnnouncementText ] = useState < RealTimeTextInformation [ ] > ( [ ] ) ;
250245
251246 const getTitle = ( ) : string => {
252247 if ( isCaptionsOn && isRealTimeTextOn ) {
@@ -314,29 +309,6 @@ export const CaptionsBanner = (props: CaptionsBannerProps): JSX.Element => {
314309 }
315310 } , [ latestLocalRealTimeText ] ) ;
316311
317- useEffect ( ( ) => {
318- if ( realTimeTexts ?. completedMessages ) {
319- //filter out the messages that have already been announced
320- const rTTMessagesToAnnounce = realTimeTexts . completedMessages . filter (
321- ( message ) => ! announcedRTT . includes ( message . id )
322- ) ;
323- if ( rTTMessagesToAnnounce . length > 0 ) {
324- setRTTAnnouncementText ( rTTMessagesToAnnounce ) ;
325- setAnnouncedRTT ( ( prev ) => [ ...prev , ...rTTMessagesToAnnounce . map ( ( message ) => message . id ) ] ) ;
326- }
327- }
328- if ( captions . length > 0 ) {
329- // filter out the captions that have already been announced
330- const captionsToAnnounce = captions . filter (
331- ( caption ) => ! announcedCaption . includes ( caption . id ) && caption . isFinalized
332- ) ;
333- if ( captionsToAnnounce . length > 0 ) {
334- setCaptionAnnouncementText ( captionsToAnnounce ) ;
335- setAnnouncedCaption ( ( prev ) => [ ...prev , ...captionsToAnnounce . map ( ( caption ) => caption . id ) ] ) ;
336- }
337- }
338- } , [ captions , realTimeTexts ?. completedMessages , announcedRTT , announcedCaption ] ) ;
339-
340312 const handleKeyDown = ( event : React . KeyboardEvent < HTMLInputElement | HTMLTextAreaElement > ) : void => {
341313 if ( event . key === 'Enter' ) {
342314 event . preventDefault ( ) ;
@@ -384,26 +356,12 @@ export const CaptionsBanner = (props: CaptionsBannerProps): JSX.Element => {
384356 < >
385357 { ( startCaptionsInProgress || isCaptionsOn || isRealTimeTextOn ) && (
386358 < FocusZone shouldFocusOnMount className = { captionsContainerClassName } data-ui-id = "captions-banner" >
387- { /* ARIA live region */ }
388- { ( rttAnnouncementText . length > 0 || captionAnnouncementText ?. length > 0 ) && (
389- < div aria-live = "assertive" role = "alert" aria-atomic = "true" className = { hiddenAnnouncementClassName } >
390- < span >
391- { rttAnnouncementText . map ( ( text ) => (
392- < span >
393- { strings . realTimeTextBannerTitle } { text . displayName } : { text . message }
394- </ span >
395- ) ) }
396- </ span >
397- < span >
398- { captionAnnouncementText . map ( ( text ) => (
399- < span >
400- { strings . captionsOnlyContainerTitle } { text . displayName } : { text . captionText }
401- </ span >
402- ) ) }
403- </ span >
404- </ div >
405- ) }
406-
359+ < _CaptionsAndRTTAnnouncer
360+ captions = { captions }
361+ realTimeTexts = { realTimeTexts }
362+ realTimeTextTitle = { strings . realTimeTextBannerTitle ?? '' }
363+ captionsTitle = { strings . captionsOnlyContainerTitle ?? '' }
364+ />
407365 { ( isCaptionsOn || isRealTimeTextOn ) && formFactor === 'compact' && (
408366 < Stack
409367 horizontal
0 commit comments