fix: scrape selection — drop Set, query checkboxes by data-idx directly on save

This commit is contained in:
James 2026-03-20 01:23:35 -04:00
parent dc30969119
commit ffbe134708
1 changed files with 8 additions and 18 deletions

View File

@ -435,7 +435,7 @@
html += '<div class="rounded-lg overflow-hidden" style="background:var(--ds-sf);border:1px solid var(--ds-bd)">' html += '<div class="rounded-lg overflow-hidden" style="background:var(--ds-sf);border:1px solid var(--ds-bd)">'
// checkbox + name row // checkbox + name row
+ '<div class="flex items-center gap-3 px-3 py-2 cursor-pointer" onclick="toggleScrapeExpand(' + i + ')">' + '<div class="flex items-center gap-3 px-3 py-2 cursor-pointer" onclick="toggleScrapeExpand(' + i + ')">'
+ '<input type="checkbox" class="rescrape-cb accent-[#c9a84c] shrink-0" data-idx="' + i + '" onchange="toggleScrapeSelect(' + i + ',this.checked);syncRescrapeSelectAll();event.stopPropagation();" onclick="event.stopPropagation()">' + '<input type="checkbox" class="rescrape-cb accent-[#c9a84c] shrink-0" data-idx="' + i + '" onchange="syncRescrapeSelectAll();event.stopPropagation();" onclick="event.stopPropagation()">'
+ '<div class="flex-1 min-w-0">' + '<div class="flex-1 min-w-0">'
+ '<div class="text-sm text-white truncate">' + escHtml(p.name || p.email || '—') + '</div>' + '<div class="text-sm text-white truncate">' + escHtml(p.name || p.email || '—') + '</div>'
+ '<div class="text-xs truncate" style="color:var(--ds-tx3)">' + [p.title, p.email].filter(Boolean).map(v => escHtml(v)).join(' · ') + '</div>' + '<div class="text-xs truncate" style="color:var(--ds-tx3)">' + [p.title, p.email].filter(Boolean).map(v => escHtml(v)).join(' · ') + '</div>'
@ -482,22 +482,11 @@
document.getElementById('rescrapeResults').classList.remove('hidden'); document.getElementById('rescrapeResults').classList.remove('hidden');
// Store new people for the add button // Store new people for the add button
window._rescrapeNewPeople = newPeople; window._rescrapeNewPeople = newPeople;
window._scrapeSelected = new Set();
} }
function toggleAllRescrape(checked) { function toggleAllRescrape(checked) {
if (!window._scrapeSelected) window._scrapeSelected = new Set(); document.querySelectorAll('.rescrape-cb').forEach(cb => { cb.checked = checked; });
document.querySelectorAll('.rescrape-cb').forEach(cb => { syncRescrapeSelectAll();
cb.checked = checked;
const idx = parseInt(cb.dataset.idx);
if (checked) window._scrapeSelected.add(idx);
else window._scrapeSelected.delete(idx);
});
}
function toggleScrapeSelect(idx, checked) {
if (!window._scrapeSelected) window._scrapeSelected = new Set();
if (checked) window._scrapeSelected.add(idx);
else window._scrapeSelected.delete(idx);
} }
function syncRescrapeSelectAll() { function syncRescrapeSelectAll() {
const all = document.querySelectorAll('.rescrape-cb'); const all = document.querySelectorAll('.rescrape-cb');
@ -542,11 +531,12 @@
} }
async function saveRescrapeSelection() { async function saveRescrapeSelection() {
const people = window._rescrapeNewPeople || []; const people = window._rescrapeNewPeople || [];
const selected = window._scrapeSelected || new Set();
const toAdd = []; const toAdd = [];
selected.forEach(idx => { people.forEach((p, i) => {
const p = people[idx]; const cb = document.querySelector('.rescrape-cb[data-idx="' + i + '"]');
if (p) toAdd.push({ name: p.name || '', email: p.email || '', title: p.title || '', phone_business: p.phone_business || p.phone || '', phone_personal: p.phone_personal || '', photo: p.photo || '', bio: p.bio || '', linkedin: p.linkedin || '' }); if (cb && cb.checked && p) {
toAdd.push({ name: p.name || '', email: p.email || '', title: p.title || '', phone_business: p.phone_business || p.phone || '', phone_personal: p.phone_personal || '', photo: p.photo || '', bio: p.bio || '', linkedin: p.linkedin || '' });
}
}); });
if (toAdd.length === 0) { document.getElementById('rescrapeResults').classList.add('hidden'); return; } if (toAdd.length === 0) { document.getElementById('rescrapeResults').classList.add('hidden'); return; }
toAdd.forEach(m => editingMembers.push(m)); toAdd.forEach(m => editingMembers.push(m));