From e36ff9d1a99736b7ff93ce6354ee6032f0f8b714 Mon Sep 17 00:00:00 2001 From: Jacob Coffee Date: Fri, 1 May 2026 09:50:40 -0500 Subject: [PATCH] fix(schedule): don't split poster collapse keys on start time (regression from #289) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #289 added \`-\${slot.start}\` to the collapsedGroups key to stop morning + afternoon Break slots from merging into one 10:30-4:30 row. Side effect: every individual 5-minute kind="poster" slot got its own key too, so the daily poster session — which is supposed to fold into ONE "Posters" row per day — exploded into 50+ 5-minute rows on the schedule timeline. Only append the start segment for kind="break". Posters keep the original \`kind-day-name\` key and collapse to a single row again. Co-Authored-By: Claude Opus 4.7 (1M context) --- src/app/providers/conference-data.ts | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/app/providers/conference-data.ts b/src/app/providers/conference-data.ts index 2a6fd021..7163896f 100644 --- a/src/app/providers/conference-data.ts +++ b/src/app/providers/conference-data.ts @@ -261,12 +261,19 @@ export class ConferenceData { data.schedule.filter((s: any) => collapseKinds.includes(s.kind)).forEach((slot: any) => { const day = new Date(slot.start).toLocaleDateString('en-us', {timeZone: environment.timezone, weekday: 'short'}); const slotName = markdownToTxt(slot.name); - // Include start time in the key so morning and afternoon "Break" - // entries don't collapse into a single 10:30-4:30 row that spans - // the lunches and afternoon talks. Per-room same-start slots - // (e.g. all the 13:00 Lunch (Hall AB) entries across talk rooms) - // still share a key and merge correctly. - const key = `${slot.kind}-${day}-${slotName}-${slot.start}`; + // Include start time in the key for break slots so morning and + // afternoon "Break" entries don't collapse into a single 10:30-4:30 + // row spanning lunches and afternoon talks. Per-room same-start + // breaks/lunches still merge correctly because they share start. + // + // POSTERS are different — every individual poster slot in the API + // is a 5-minute kind="poster" entry with name="Posters", and we + // intentionally fold the entire daily poster session into ONE row. + // Adding start to the key here would split them back into 50+ + // 5-minute rows, which is the regression PR #289 introduced. + // So: only add start for breaks. + const startKey = slot.kind === 'break' ? `-${slot.start}` : ''; + const key = `${slot.kind}-${day}-${slotName}${startKey}`; if (!collapsedGroups.has(key)) { // Rename lunchtime breaks let name = slot.kind === 'poster' ? 'Posters' : markdownToTxt(slot.name);