@@ -4,7 +4,7 @@ import { getFirestore } from 'firebase-admin/firestore';
44import * as functions from 'firebase-functions' ;
55import { sessionsSpeakersMap } from './schedule-generator/speakers-sessions-map.js' ;
66import { sessionsSpeakersScheduleMap } from './schedule-generator/speakers-sessions-schedule-map.js' ;
7- import { isEmpty , ScheduleMap , SessionMap , snapshotToObject , SpeakerMap } from './utils.js' ;
7+ import { isEmpty , pickMainTag , ScheduleMap , SessionMap , snapshotToObject , SpeakerMap } from './utils.js' ;
88
99const isScheduleEnabled = async ( ) : Promise < boolean > => {
1010 const doc = await getFirestore ( ) . collection ( 'config' ) . doc ( 'schedule' ) . get ( ) ;
@@ -83,10 +83,21 @@ async function generateAndSaveData(changedSpeaker?) {
8383 }
8484
8585 // Include all sessions (including past years not on current schedule)
86- // This ensures past talk pages are accessible via direct links
86+ // Enrich with resolved speaker objects so session pages render correctly
8787 for ( const [ sessionId , session ] of Object . entries ( sessions ) ) {
8888 if ( ! generatedData . sessions [ sessionId ] ) {
89- generatedData . sessions [ sessionId ] = { ...( session as object ) , id : sessionId } ;
89+ const raw = session as { speakers ?: string [ ] ; tags ?: string [ ] ; [ key : string ] : unknown } ;
90+ const resolvedSpeakers = ( raw . speakers || [ ] ) . map ( ( speakerId : string ) => ( {
91+ id : speakerId ,
92+ ...( speakers [ speakerId ] || { } ) ,
93+ sessions : null ,
94+ } ) ) ;
95+ generatedData . sessions [ sessionId ] = {
96+ ...raw ,
97+ id : sessionId ,
98+ mainTag : pickMainTag ( raw . tags ) ,
99+ speakers : resolvedSpeakers ,
100+ } ;
90101 }
91102 }
92103
0 commit comments