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:
parent
af1e252f1b
commit
092d04291e
1 changed files with 11 additions and 18 deletions
|
|
@ -1624,13 +1624,8 @@
|
||||||
|
|
||||||
document.getElementById('conversation').innerHTML = '';
|
document.getElementById('conversation').innerHTML = '';
|
||||||
|
|
||||||
// Progress container: completed results stay, spinner updates in place
|
// Progress container: completed results accumulate, spinner updates in place
|
||||||
const progressDiv = document.createElement('div');
|
addMessage('ai', '<div id="extractionProgress"></div><div id="extractionSpinner"></div>');
|
||||||
progressDiv.id = 'extractionProgress';
|
|
||||||
const spinnerDiv = document.createElement('div');
|
|
||||||
spinnerDiv.id = 'extractionSpinner';
|
|
||||||
document.getElementById('conversation').appendChild(progressDiv);
|
|
||||||
document.getElementById('conversation').appendChild(spinnerDiv);
|
|
||||||
|
|
||||||
// Combined results — start with business info from discovery phase
|
// Combined results — start with business info from discovery phase
|
||||||
const allItems = [];
|
const allItems = [];
|
||||||
|
|
@ -1640,12 +1635,10 @@
|
||||||
let totalProcessed = 0;
|
let totalProcessed = 0;
|
||||||
|
|
||||||
for (const page of pages) {
|
for (const page of pages) {
|
||||||
spinnerDiv.innerHTML = `
|
document.getElementById('extractionSpinner').innerHTML = `
|
||||||
<div class="message ai-message" style="margin-top:8px;">
|
<div style="display:flex;align-items:center;gap:12px;margin-top:8px;">
|
||||||
<div style="display:flex;align-items:center;gap:12px;">
|
<div class="loading-spinner"></div>
|
||||||
<div class="loading-spinner"></div>
|
<span>Extracting <strong>${page.name}</strong> menu... (${totalProcessed + 1} of ${pages.length})</span>
|
||||||
<span>Extracting <strong>${page.name}</strong> menu... (${totalProcessed + 1} of ${pages.length})</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
|
|
||||||
|
|
@ -1682,14 +1675,14 @@
|
||||||
totalProcessed++;
|
totalProcessed++;
|
||||||
const scheduleNote = result.menuSchedule ? ` (${result.menuSchedule})` : '';
|
const scheduleNote = result.menuSchedule ? ` (${result.menuSchedule})` : '';
|
||||||
const line = document.createElement('div');
|
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>`;
|
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 {
|
} else {
|
||||||
const line = document.createElement('div');
|
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>`;
|
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++;
|
totalProcessed++;
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
@ -1701,7 +1694,7 @@
|
||||||
totalProcessed++;
|
totalProcessed++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spinnerDiv.remove();
|
document.getElementById('extractionSpinner').remove();
|
||||||
|
|
||||||
// Compute max business hours from all menu schedules
|
// Compute max business hours from all menu schedules
|
||||||
if (allMenus.some(m => m.schedule) && !businessInfo.hours) {
|
if (allMenus.some(m => m.schedule) && !businessInfo.hours) {
|
||||||
|
|
|
||||||
Reference in a new issue