Fix extraction progress: accumulate completed menus inside single message

Use getElementById for progressDiv/spinnerDiv inside an addMessage bubble
so completed lines persist as each menu finishes extracting.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
John Mizerek 2026-03-15 00:53:02 -07:00
parent af1e252f1b
commit 092d04291e

View file

@ -1624,13 +1624,8 @@
document.getElementById('conversation').innerHTML = '';
// Progress container: completed results stay, spinner updates in place
const progressDiv = document.createElement('div');
progressDiv.id = 'extractionProgress';
const spinnerDiv = document.createElement('div');
spinnerDiv.id = 'extractionSpinner';
document.getElementById('conversation').appendChild(progressDiv);
document.getElementById('conversation').appendChild(spinnerDiv);
// Progress container: completed results accumulate, spinner updates in place
addMessage('ai', '<div id="extractionProgress"></div><div id="extractionSpinner"></div>');
// Combined results — start with business info from discovery phase
const allItems = [];
@ -1640,13 +1635,11 @@
let totalProcessed = 0;
for (const page of pages) {
spinnerDiv.innerHTML = `
<div class="message ai-message" style="margin-top:8px;">
<div style="display:flex;align-items:center;gap:12px;">
document.getElementById('extractionSpinner').innerHTML = `
<div style="display:flex;align-items:center;gap:12px;margin-top:8px;">
<div class="loading-spinner"></div>
<span>Extracting <strong>${page.name}</strong> menu... (${totalProcessed + 1} of ${pages.length})</span>
</div>
</div>
`;
try {
@ -1682,14 +1675,14 @@
totalProcessed++;
const scheduleNote = result.menuSchedule ? ` (${result.menuSchedule})` : '';
const line = document.createElement('div');
line.className = 'message ai-message';
line.style.cssText = 'padding:2px 0;';
line.innerHTML = `<p style="margin:4px 0;">✓ Extracted <strong>${page.name}</strong>${scheduleNote}: ${data.items?.length || 0} items in ${data.categories?.length || 0} categories</p>`;
progressDiv.appendChild(line);
document.getElementById('extractionProgress').appendChild(line);
} else {
const line = document.createElement('div');
line.className = 'message ai-message';
line.style.cssText = 'padding:2px 0;';
line.innerHTML = `<p style="margin:4px 0;color:var(--warning);">✗ Could not extract items from ${page.name} page.</p>`;
progressDiv.appendChild(line);
document.getElementById('extractionProgress').appendChild(line);
totalProcessed++;
}
} catch (err) {
@ -1701,7 +1694,7 @@
totalProcessed++;
}
}
spinnerDiv.remove();
document.getElementById('extractionSpinner').remove();
// Compute max business hours from all menu schedules
if (allMenus.some(m => m.schedule) && !businessInfo.hours) {