← back to Dw Pitch Followup
ui: show last-sample-sent date as a chip on every card (uses existing when_iso; removed redundant .when line)
d2a48d918bcdb4b0cd41705ea831de6f5672751a · 2026-06-30 15:43:24 -0700 · Steve
Files touched
Diff
commit d2a48d918bcdb4b0cd41705ea831de6f5672751a
Author: Steve <steve@designerwallcoverings.com>
Date: Tue Jun 30 15:43:24 2026 -0700
ui: show last-sample-sent date as a chip on every card (uses existing when_iso; removed redundant .when line)
---
public/index.html | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/public/index.html b/public/index.html
index 6217732..deb9ddd 100644
--- a/public/index.html
+++ b/public/index.html
@@ -97,6 +97,9 @@ let DATA=null, cur='list1', rendered=0, view=[], io=null;
const LS = (k,d)=>{try{return JSON.parse(localStorage.getItem('dwpf:'+k))??d}catch{return d}};
const setLS=(k,v)=>localStorage.setItem('dwpf:'+k, JSON.stringify(v));
const fmtWhen = iso => { if(!iso) return ''; const d=new Date(iso); return d.toLocaleString(undefined,{year:'numeric',month:'short',day:'numeric',hour:'numeric',minute:'2-digit'}); };
+// Date chip for each card's chips row — for list1 this is the LAST DATE A SAMPLE WAS SENT
+// (when_label='last sample sent'); list2='last invoiced', list3='requested'. Full ISO in title.
+const dateChip = r => r.when_iso ? `<span class="chip" title="${esc(r.when_iso)}">🕓 ${esc(r.when_label||'when')}: ${esc(fmtWhen(r.when_iso))}</span>` : '';
const esc = s => String(s??'').replace(/[&<>"]/g,c=>({'&':'&','<':'<','>':'>','"':'"'}[c]));
// mfr-number scrub for display: drop SKU-ish tokens (any alnum run containing a digit), keep names.
function stripMfr(s){ return String(s||'').replace(/[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*/g,t=>/\d/.test(t)?'':t).replace(/\s*[|·•—–-]+\s*/g,' · ').replace(/(?:^[\s·]+|[\s·]+$)/g,'').replace(/(?:·\s*){2,}/g,'· ').replace(/\bSample\b\s*$/i,'').replace(/\s{2,}/g,' ').trim().replace(/[·\s]+$/,''); }
@@ -131,21 +134,20 @@ function cardHTML(r){
if(cur==='list3'){
head = `<div><div class="co">${esc(r.vendor)} <span class="chip r">${r.days_overdue}d overdue</span></div>
<div class="sub">${esc(r.company||('account '+r.account))} · acct ${esc(r.account)}</div></div>`;
- facts = `<div class="chips">${showMfr()?`<span class="chip k">${esc(r.sku||'—')}</span>`:''}<span class="chip">${esc(lbl(r.pattern)||'pattern')}</span></div>`;
+ facts = `<div class="chips">${showMfr()?`<span class="chip k">${esc(r.sku||'—')}</span>`:''}<span class="chip">${esc(lbl(r.pattern)||'pattern')}</span>${dateChip(r)}</div>`;
} else if(cur==='list2'){
head = `<div><div class="co">${esc(r.company)}</div><div class="sub">${esc(r.email||'no email')} · acct ${esc(r.account)}</div></div>`;
- facts = `<div class="chips"><span class="chip a">${r.invoice_count} sample inv</span><span class="chip">max $${r.max_total}</span></div>
+ facts = `<div class="chips"><span class="chip a">${r.invoice_count} sample inv</span><span class="chip">max $${r.max_total}</span>${dateChip(r)}</div>
${(()=>{const d=r.details&&r.details[0]?lbl(r.details[0]):'';return d?`<div class="pats">${esc(d)}</div>`:''})()}`;
} else {
head = `<div><div class="co">${esc(r.company)} <span class="chip g">${r.ratio}% sent</span></div>
<div class="sub">${esc(r.email||'no email')} · acct ${esc(r.account)}</div></div>`;
- facts = `<div class="chips"><span class="chip">${r.sent}/${r.ordered} sent</span>${r.missing?`<span class="chip a">${r.missing} missing</span>`:''}</div>
+ facts = `<div class="chips"><span class="chip">${r.sent}/${r.ordered} sent</span>${r.missing?`<span class="chip a">${r.missing} missing</span>`:''}${dateChip(r)}</div>
${(()=>{const p=(r.patterns||[]).map(lbl).filter(Boolean).slice(0,3).join(' · ');return p?`<div class="pats">${esc(p)}</div>`:''})()}`;
}
return `<div class="card ${sel?'sel':''}" data-k="${esc(k)}">
<div class="top"><input type="checkbox" ${sel?'checked':''} data-sel/>${head}</div>
${facts}
- <div class="when" title="${esc(r.when_iso||'')}">🕓 ${esc(r.when_label||'when')}: ${esc(fmtWhen(r.when_iso))}</div>
<div class="acts"><button class="btn gold" data-gen>Generate letter</button></div>
<div class="letter"><div class="subj"></div><div class="ctxnote"></div><textarea spellcheck="false"></textarea>
<div class="acts"><button class="btn" data-regen>↻ Regenerate</button><button class="btn" data-copy>Copy letter</button><span class="meta" data-variant></span></div></div>
← 351e8f9 Pitch follow-up: hide mfr# from UI + client letters (toggle)
·
back to Dw Pitch Followup
·
chore: macstudio3 migration — reconcile from mac2 + repoint 9027026 →