1- import type { Activity , State } from '../types' ;
1+ import type { Activity , LivestreamSessionMap , State } from '../types' ;
2+
3+ function * yieldSessionActivities (
4+ session : NonNullable < ReturnType < LivestreamSessionMap [ 'get' ] > > ,
5+ activityMap : State [ 'activityMap' ]
6+ ) : Generator < Activity > {
7+ if ( session . finalized ) {
8+ // After finalization, only yield the final revision — intermediate revisions are pruned.
9+ // eslint-disable-next-line no-magic-numbers
10+ const lastEntry = session . activities . at ( - 1 ) ;
11+
12+ lastEntry && ( yield activityMap . get ( lastEntry . activityLocalId ) ! . activity ) ;
13+ } else {
14+ for ( const activityEntry of session . activities ) {
15+ yield activityMap . get ( activityEntry . activityLocalId ) ! . activity ;
16+ }
17+ }
18+ }
219
320export default function computeSortedActivities (
421 temporalState : Pick < State , 'activityMap' | 'howToGroupingMap' | 'livestreamSessionMap' | 'sortedChatHistoryList' >
@@ -20,17 +37,13 @@ export default function computeSortedActivities(
2037 } else {
2138 howToPartEntry . type satisfies 'livestream session' ;
2239
23- for ( const activityEntry of livestreamSessionMap . get ( howToPartEntry . livestreamSessionId ) ! . activities ) {
24- yield activityMap . get ( activityEntry . activityLocalId ) ! . activity ;
25- }
40+ yield * yieldSessionActivities ( livestreamSessionMap . get ( howToPartEntry . livestreamSessionId ) ! , activityMap ) ;
2641 }
2742 }
2843 } else {
2944 sortedEntry . type satisfies 'livestream session' ;
3045
31- for ( const activityEntry of livestreamSessionMap . get ( sortedEntry . livestreamSessionId ) ! . activities ) {
32- yield activityMap . get ( activityEntry . activityLocalId ) ! . activity ;
33- }
46+ yield * yieldSessionActivities ( livestreamSessionMap . get ( sortedEntry . livestreamSessionId ) ! , activityMap ) ;
3447 }
3548 }
3649 } ) ( )
0 commit comments