← 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
M linkedin-ventura-follow-dashboard.html
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 →