← back to Commercialrealestate
auto-save: 2026-08-01T22:40:01 (1 files) — public/lending-grid.js
4ba8f3005f153e96cb9fdcc28cbe5b1004624061 · 2026-08-01 22:40:11 -0700 · Steve Abrams
Files touched
Diff
commit 4ba8f3005f153e96cb9fdcc28cbe5b1004624061
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Sat Aug 1 22:40:11 2026 -0700
auto-save: 2026-08-01T22:40:01 (1 files) — public/lending-grid.js
---
public/lending-grid.js | 24 +++++++++++++++++++-----
1 file changed, 19 insertions(+), 5 deletions(-)
diff --git a/public/lending-grid.js b/public/lending-grid.js
index 61fa280..c4af37a 100644
--- a/public/lending-grid.js
+++ b/public/lending-grid.js
@@ -132,10 +132,24 @@
}
buildFieldToggles();
}
+ // Column show/hide + in-panel search & drag-reorder via the shared column-manager.js
+ // drop-in (TK-10128), as a VIEW over this engine's own VISCOL/COLORDER closure state.
+ let __cm = null;
function buildFieldToggles() {
- const groups = {}; COLS.forEach(c => { (groups[c.g || 'Other'] = groups[c.g || 'Other'] || []).push(c); });
- $('#fFields').innerHTML = Object.entries(groups).map(([g, cs]) =>
- `<div class="fgrp">${esc(g)}</div>` + cs.map(c => `<label class="ftog"><input type="checkbox" data-ck="${c.k}" ${colVis(c.k) ? 'checked' : ''}><span>${esc(c.l)}</span></label>`).join('')).join('');
+ if (!window.ColumnManager) { // fallback if the module hasn't loaded (keeps the grid usable)
+ const groups = {}; COLS.forEach(c => { (groups[c.g || 'Other'] = groups[c.g || 'Other'] || []).push(c); });
+ $('#fFields').innerHTML = Object.entries(groups).map(([g, cs]) =>
+ `<div class="fgrp">${esc(g)}</div>` + cs.map(c => `<label class="ftog"><input type="checkbox" data-ck="${c.k}" ${colVis(c.k) ? 'checked' : ''}><span>${esc(c.l)}</span></label>`).join('')).join('');
+ return;
+ }
+ const cols = COLS.map(c => ({ k: c.k, l: c.l, g: c.g || 'Other' }));
+ if (!__cm) {
+ __cm = ColumnManager.init({ mount: '#fFields', footer: false, hint: false, cols,
+ state: { visible: k => colVis(k), setVisible: (k, v) => { VISCOL[k] = v; saveCols(); },
+ order: () => { syncColOrder(); return COLORDER.slice(); }, setOrder: a => { COLORDER = a; saveColOrder(); },
+ reset: () => { VISCOL = {}; saveCols(); COLORDER = []; saveColOrder(); } },
+ onChange: () => render() });
+ } else { __cm.setCols(cols); }
}
function render() {
@@ -211,13 +225,13 @@
$('#thead').addEventListener('dragstart', e => { const th = e.target.closest('th'); if (!th) return; if (document.body.classList.contains('cr-dragging') || e.target.closest('.cr-handle')) { e.preventDefault(); return; } dragKey = th.dataset.k; e.dataTransfer.effectAllowed = 'move'; try { e.dataTransfer.setData('text/plain', dragKey); } catch (_) {} th.classList.add('dragging'); });
$('#thead').addEventListener('dragover', e => { if (!dragKey) return; const th = e.target.closest('th'); if (!th || th.dataset.k === dragKey) return; e.preventDefault(); e.dataTransfer.dropEffect = 'move'; const r = th.getBoundingClientRect(), after = (e.clientX - r.left) > r.width / 2; th.classList.toggle('dropR', after); th.classList.toggle('dropL', !after); });
$('#thead').addEventListener('dragleave', e => { const th = e.target.closest('th'); if (th) th.classList.remove('dropL', 'dropR'); });
- $('#thead').addEventListener('drop', e => { if (!dragKey) return; const th = e.target.closest('th'); if (!th) return; e.preventDefault(); const tgt = th.dataset.k; if (tgt !== dragKey) { const r = th.getBoundingClientRect(), after = (e.clientX - r.left) > r.width / 2; syncColOrder(); const from = COLORDER.indexOf(dragKey); if (from >= 0) { COLORDER.splice(from, 1); let to = COLORDER.indexOf(tgt); if (after) to += 1; COLORDER.splice(to, 0, dragKey); saveColOrder(); lastColSig = ''; render(); } } dragKey = null; });
+ $('#thead').addEventListener('drop', e => { if (!dragKey) return; const th = e.target.closest('th'); if (!th) return; e.preventDefault(); const tgt = th.dataset.k; if (tgt !== dragKey) { const r = th.getBoundingClientRect(), after = (e.clientX - r.left) > r.width / 2; syncColOrder(); const from = COLORDER.indexOf(dragKey); if (from >= 0) { COLORDER.splice(from, 1); let to = COLORDER.indexOf(tgt); if (after) to += 1; COLORDER.splice(to, 0, dragKey); saveColOrder(); lastColSig = ''; render(); if (__cm) __cm.refresh(); } } dragKey = null; });
$('#thead').addEventListener('dragend', () => { document.querySelectorAll('#thead th.dragging,#thead th.dropL,#thead th.dropR').forEach(x => x.classList.remove('dragging', 'dropL', 'dropR')); dragKey = null; });
$('#q').addEventListener('input', () => { q = $('#q').value.trim(); render(); });
$('#csv').addEventListener('click', exportCSV);
$('#view').addEventListener('click', e => { const b = e.target.closest('button'); if (!b) return; document.querySelectorAll('#view button').forEach(x => x.classList.toggle('on', x === b)); view = b.dataset.v; localStorage.setItem(LS('view'), view); $('#denswrap').style.display = (view === 'grid') ? 'inline-flex' : 'none'; render(); });
- $('#fFields').addEventListener('change', e => { const cb = e.target.closest('input[data-ck]'); if (!cb) return; VISCOL[cb.dataset.ck] = cb.checked; saveCols(); render(); });
+ // (#fFields change is handled inside column-manager.js now — its onChange calls render)
$('#fAll').addEventListener('click', () => { COLS.forEach(c => VISCOL[c.k] = true); saveCols(); buildFieldToggles(); render(); });
$('#fNone').addEventListener('click', () => { COLS.forEach(c => VISCOL[c.k] = false); saveCols(); buildFieldToggles(); render(); });
$('#fReset').addEventListener('click', () => { VISCOL = {}; saveCols(); COLORDER = []; saveColOrder(); try { Object.keys(localStorage).forEach(k => { if (k.indexOf('cr:' + location.pathname + ':') === 0) localStorage.removeItem(k); }); } catch (e) {} lastColSig = ''; buildFieldToggles(); render(); });
← a01bf5e Adopt column-manager.js in gov-agents + sales (TK-10120 swee
·
back to Commercialrealestate
·
Adopt column-manager.js into lending-grid.js engine — 5 page 91cb19f →