fix: track scrape selections in JS Set instead of querying DOM checked state

This commit is contained in:
James 2026-03-20 01:10:38 -04:00
parent 00c77396e4
commit dc30969119
1 changed files with 17 additions and 5 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)">'
// checkbox + name row
+ '<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="syncRescrapeSelectAll();event.stopPropagation();" onclick="event.stopPropagation()">'
+ '<input type="checkbox" class="rescrape-cb accent-[#c9a84c] shrink-0" data-idx="' + i + '" onchange="toggleScrapeSelect(' + i + ',this.checked);syncRescrapeSelectAll();event.stopPropagation();" onclick="event.stopPropagation()">'
+ '<div class="flex-1 min-w-0">'
+ '<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>'
@ -482,10 +482,22 @@
document.getElementById('rescrapeResults').classList.remove('hidden');
// Store new people for the add button
window._rescrapeNewPeople = newPeople;
window._scrapeSelected = new Set();
}
function toggleAllRescrape(checked) {
document.querySelectorAll('.rescrape-cb').forEach(cb => cb.checked = checked);
if (!window._scrapeSelected) window._scrapeSelected = new Set();
document.querySelectorAll('.rescrape-cb').forEach(cb => {
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() {
const all = document.querySelectorAll('.rescrape-cb');
@ -530,10 +542,10 @@
}
async function saveRescrapeSelection() {
const people = window._rescrapeNewPeople || [];
const checked = document.querySelectorAll('.rescrape-cb:checked');
const selected = window._scrapeSelected || new Set();
const toAdd = [];
checked.forEach(cb => {
const p = people[parseInt(cb.dataset.idx)];
selected.forEach(idx => {
const p = people[idx];
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 (toAdd.length === 0) { document.getElementById('rescrapeResults').classList.add('hidden'); return; }