Show multi-menu UI when Claude detects separate menus

When the import detects multiple menus (Brunch, Lunch, Dinner, etc.),
shows checkboxes for each menu instead of a single menu name input.
Passes selectedMenus array to saveWizard for separate menu creation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
John Mizerek 2026-03-14 16:29:49 -07:00
parent 0578d7ed88
commit 6862d97350

View file

@ -917,6 +917,7 @@
<h3>Menu Summary</h3> <h3>Menu Summary</h3>
</div> </div>
<div class="summary-card-body"> <div class="summary-card-body">
<div id="singleMenuSection">
<div class="summary-stat" style="flex-direction: column; align-items: stretch; gap: 8px;"> <div class="summary-stat" style="flex-direction: column; align-items: stretch; gap: 8px;">
<span class="summary-stat-label">Menu Name</span> <span class="summary-stat-label">Menu Name</span>
<input type="text" id="menuNameInput" value="Main Menu" placeholder="e.g., Main Menu, Lunch, Dinner" <input type="text" id="menuNameInput" value="Main Menu" placeholder="e.g., Main Menu, Lunch, Dinner"
@ -931,6 +932,14 @@
</div> </div>
<small style="color: var(--gray-500);">Leave empty for all-day availability. You can create additional menus later in the Menu Builder.</small> <small style="color: var(--gray-500);">Leave empty for all-day availability. You can create additional menus later in the Menu Builder.</small>
</div> </div>
</div>
<div id="multiMenuSection" style="display: none;">
<div class="summary-stat" style="flex-direction: column; align-items: stretch; gap: 8px;">
<span class="summary-stat-label">Detected Menus</span>
<div id="multiMenuList"></div>
<small style="color: var(--gray-500);">Each menu will be created separately with its own items and categories.</small>
</div>
</div>
<div class="summary-stat"> <div class="summary-stat">
<span class="summary-stat-label">Categories</span> <span class="summary-stat-label">Categories</span>
<span class="summary-stat-value" id="summaryCategories">0</span> <span class="summary-stat-value" id="summaryCategories">0</span>
@ -3100,11 +3109,28 @@
} }
// In add-menu mode, hide menu name/hours/community meal (already set during menu creation) // In add-menu mode, hide menu name/hours/community meal (already set during menu creation)
const detectedMenus = config.extractedData.menus || [];
if (config.menuId) { if (config.menuId) {
document.getElementById('menuNameInput').parentElement.style.display = 'none'; document.getElementById('singleMenuSection').style.display = 'none';
document.getElementById('menuStartTime').closest('.summary-stat').style.display = 'none'; document.getElementById('multiMenuSection').style.display = 'none';
document.getElementById('communityMealCard').style.display = 'none'; document.getElementById('communityMealCard').style.display = 'none';
} else if (detectedMenus.length > 1) {
// Multiple menus detected — show multi-menu UI
document.getElementById('singleMenuSection').style.display = 'none';
document.getElementById('multiMenuSection').style.display = '';
const menuListHtml = detectedMenus.map((m, i) => {
const menuItems = (config.extractedData.items || []).filter(item => item.menu === m.name);
return `<div style="display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--gray-50);border:1px solid var(--gray-200);border-radius:6px;margin-bottom:6px;">
<input type="checkbox" id="menu_${i}" checked style="width:18px;height:18px;">
<label for="menu_${i}" style="flex:1;font-weight:500;">${m.name}</label>
<span style="color:var(--gray-500);font-size:13px;">${menuItems.length} items</span>
</div>`;
}).join('');
document.getElementById('multiMenuList').innerHTML = menuListHtml;
} else { } else {
// Single menu — show normal UI
document.getElementById('singleMenuSection').style.display = '';
document.getElementById('multiMenuSection').style.display = 'none';
// Set default menu hours based on business hours (earliest open, latest close) // Set default menu hours based on business hours (earliest open, latest close)
const hoursSchedule = business.hoursSchedule || []; const hoursSchedule = business.hoursSchedule || [];
if (hoursSchedule.length > 0) { if (hoursSchedule.length > 0) {
@ -3145,6 +3171,21 @@
// In add-menu mode, skip menu name/hours/community meal — already set // In add-menu mode, skip menu name/hours/community meal — already set
if (!config.menuId) { if (!config.menuId) {
const detectedMenus = config.extractedData.menus || [];
if (detectedMenus.length > 1) {
// Multi-menu mode — collect selected menus
const selectedMenus = [];
detectedMenus.forEach((m, i) => {
const cb = document.getElementById(`menu_${i}`);
if (cb && cb.checked) selectedMenus.push(m.name);
});
if (selectedMenus.length === 0) {
showToast('Please select at least one menu', 'error');
return;
}
config.extractedData.selectedMenus = selectedMenus;
config.extractedData.menuName = selectedMenus[0]; // fallback
} else {
const menuName = document.getElementById('menuNameInput').value.trim() || 'Main Menu'; const menuName = document.getElementById('menuNameInput').value.trim() || 'Main Menu';
const menuStartTime = document.getElementById('menuStartTime')?.value || ''; const menuStartTime = document.getElementById('menuStartTime')?.value || '';
const menuEndTime = document.getElementById('menuEndTime')?.value || ''; const menuEndTime = document.getElementById('menuEndTime')?.value || '';
@ -3170,6 +3211,7 @@
config.extractedData.menuName = menuName; config.extractedData.menuName = menuName;
config.extractedData.menuStartTime = menuStartTime; config.extractedData.menuStartTime = menuStartTime;
config.extractedData.menuEndTime = menuEndTime; config.extractedData.menuEndTime = menuEndTime;
}
// Community meal participation type (1=provide meals, 2=food bank) // Community meal participation type (1=provide meals, 2=food bank)
const communityMealRadio = document.querySelector('input[name="communityMealType"]:checked'); const communityMealRadio = document.querySelector('input[name="communityMealType"]:checked');