[object Object]

← back to Ventura Corridor

LinkedIn dashboard: cap table at 500 rows for snappy 2,860-record list + confirm guard on Mark All Visible

238031f1a4a613b66a4d7ec95c0c709f56462f6f · 2026-06-24 16:28:02 -0700 · Steve

Files touched

Diff

commit 238031f1a4a613b66a4d7ec95c0c709f56462f6f
Author: Steve <steve@designerwallcoverings.com>
Date:   Wed Jun 24 16:28:02 2026 -0700

    LinkedIn dashboard: cap table at 500 rows for snappy 2,860-record list + confirm guard on Mark All Visible
---
 linkedin-ventura-follow-dashboard.html | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

diff --git a/linkedin-ventura-follow-dashboard.html b/linkedin-ventura-follow-dashboard.html
index 479b529..f6a94d0 100644
--- a/linkedin-ventura-follow-dashboard.html
+++ b/linkedin-ventura-follow-dashboard.html
@@ -158,6 +158,7 @@ let currentSource = 'all';  // all | ventura | shopify
 let selected = new Set();   // session-only batch selection (ids)
 let queue = [];             // ordered ids for the stepper
 let queuePos = 0;
+const RENDER_CAP = 500;     // cap DOM rows so the 2,860-record list stays snappy
 
 function getFollowed() {
   try { return new Set(JSON.parse(localStorage.getItem(STORAGE_KEY) || '[]')); }
@@ -230,8 +231,11 @@ function applyFilters() {
   
   const tbody = document.getElementById('tbl-body');
   tbody.innerHTML = '';
-  
-  rows.forEach(r => {
+
+  const truncated = rows.length > RENDER_CAP;
+  const renderRows = truncated ? rows.slice(0, RENDER_CAP) : rows;
+
+  renderRows.forEach(r => {
     const isFollowed = followed.has(r.id);
     const isNoLink = noLink.has(r.id);
     const isSelected = selected.has(r.id);
@@ -257,7 +261,9 @@ function applyFilters() {
   });
   
   document.getElementById('empty-state').style.display = rows.length ? 'none' : 'block';
-  document.getElementById('visible-count').textContent = rows.length + ' businesses shown';
+  document.getElementById('visible-count').textContent = truncated
+    ? ('showing ' + RENDER_CAP + ' of ' + rows.length + ' matches — refine search or pick a tier/source to see the rest')
+    : (rows.length + ' businesses shown');
   updateProgress();
   updateSelectionUI();
 }
@@ -423,17 +429,17 @@ function clearSelection() {
 }
 
 function markAllVisible() {
+  // operate on the full filtered set, not just the capped DOM rows
+  const recs = visibleRecords();
+  if (!recs.length) return;
+  if (recs.length > 50 &&
+      !confirm('Mark all ' + recs.length + ' businesses matching the current filter as Followed?\n\nNarrow with a tier/source/search first if you only meant some.')) {
+    return;
+  }
   const followed = getFollowed();
-  document.querySelectorAll('#tbl-body tr').forEach(tr => {
-    const id = tr.dataset.id;
-    if (!id) return;
-    followed.add(id);
-    tr.classList.add('followed');
-    const p = tr.querySelector('.fol-pill');
-    if (p) { p.classList.add('on'); p.textContent = '✓ Followed'; }
-  });
+  recs.forEach(r => followed.add(r.id));
   saveFollowed(followed);
-  updateProgress();
+  applyFilters();   // re-render so capped + visible rows both reflect the change
 }
 
 function resetAll() {

← ce8201c LinkedIn dashboard: add 2,591 DW trade clients as a source +  ·  back to Ventura Corridor  ·  chore: macstudio3 migration — reconcile from mac2 + repoint 9a05162 →