[object Object]

← back to All Designerwallcoverings

List view: add Mfr # column with DW·Shop·FM mismatch breakout

25613cbf475e6300c3b46e4da1b30cacdf0fcf10 · 2026-07-08 12:01:50 -0700 · Steve

Files touched

Diff

commit 25613cbf475e6300c3b46e4da1b30cacdf0fcf10
Author: Steve <steve@designerwallcoverings.com>
Date:   Wed Jul 8 12:01:50 2026 -0700

    List view: add Mfr # column with DW·Shop·FM mismatch breakout
---
 public/index.html | 21 ++++++++++++++++++++-
 1 file changed, 20 insertions(+), 1 deletion(-)

diff --git a/public/index.html b/public/index.html
index 8cf53ae..96590f8 100644
--- a/public/index.html
+++ b/public/index.html
@@ -104,6 +104,11 @@
   .mfrn.mismatch .shopv { color:var(--txt); }
   .mfrn.mismatch .dwnum b, .mfrn.mismatch .shopv b, .mfrn.mismatch .fmv b { color:var(--mut); font-weight:600; letter-spacing:.03em; margin-right:1px; }
   .mfrn .mmflag { color:#e0b46a; cursor:help; }
+  /* List-view mfr cell: DW · Shop · FM breakout; amber tint + muted labels on a mismatch */
+  td.tmfr { font-variant-numeric:tabular-nums; font-size:11px; white-space:nowrap; }
+  td.tmfr .tfm { color:#7fc98a; }
+  td.tmfr .tmm { background:#2a1d0c; border-radius:4px; padding:1px 5px; color:#e0b46a; }
+  td.tmfr .tmm .k { color:var(--mut); font-weight:600; letter-spacing:.02em; }
   .fmspec { margin-top:3px; font-size:calc(9.5px*var(--fs)); color:var(--mut); line-height:1.5; }
   .fmspec b { color:#8aa6c9; font-weight:600; letter-spacing:.02em; }
   .badge.disco { background:#3a1616; color:#e0b3b3; }
@@ -413,7 +418,7 @@ let qt; qEl.oninput = (e) => { clearTimeout(qt); qt = setTimeout(() => { state.q
 /* ── list-view sortable columns: every column sorts, click toggles asc/desc ── */
 const COLS = [
   { label: '', key: null }, // thumb
-  { label: 'SKU', key: 'sku' }, { label: 'Title', key: 'title' }, { label: 'Vendor', key: 'vendor' },
+  { label: 'SKU', key: 'sku' }, { label: 'Mfr # (DW·Shop·FM)', key: null }, { label: 'Title', key: 'title' }, { label: 'Vendor', key: 'vendor' },
   { label: 'Type', key: 'type' }, { label: 'Pattern', key: 'pattern' }, { label: 'Color', key: 'color' },
   { label: 'Style', key: 'style' }, { label: 'Material', key: 'material' },
   { label: 'Price', key: 'price', num: true }, { label: 'Lifecycle', key: 'lifecycle' },
@@ -788,6 +793,19 @@ function mfrHTML(r) {
   }
   return r.mfr_number ? `<div class="mfrn"><b>Mfr #</b> ${shop}</div>` : '';
 }
+// Compact List-view mfr cell — same DW · Shop · FM breakout as the card, one line for the table.
+function mfrCell(r) {
+  const shop = r.mfr_number ? esc(r.mfr_number) : '—';
+  if (r.fm_present && r.fm_mfr_number) {
+    const fm = esc(r.fm_mfr_number);
+    if (r.mfr_mismatch) {
+      const dw = esc(String(r.sku || '').replace(/-sample$/i, ''));
+      return `<span class="tmm"><span class="k">DW</span> ${dw} <span class="k">Shop</span> ${shop} <span class="k">FM</span> <b>${fm}</b> ⚠</span>`;
+    }
+    return `${shop} <span class="tfm">· FM ${fm}</span>`;
+  }
+  return shop;
+}
 // A compact line of FileMaker specs (width + up to 3 others) — the source-of-truth values
 // available to push. Only rendered when the SKU is in the WALLPAPER file and has specs.
 function fmSpecsHTML(r) {
@@ -824,6 +842,7 @@ function listRow(r) {
   tr.appendChild((() => { const td = document.createElement('td'); td.className = 'timg';
     td.innerHTML = r.image ? `<div style="background-image:url('${r.image}')"></div>` : '<div></div>'; return td; })());
   tr.appendChild(cell(`<span class="sku">${r.sku || '—'}</span>`));
+  tr.appendChild(cell(mfrCell(r), 'tmfr'));
   tr.appendChild(cell((r.title || '').replace(/</g, '&lt;')));
   tr.appendChild(cell(r.vendor || ''));
   tr.appendChild(cell(r.type || ''));

← d3b82a5 Mismatch chip: show DW number alongside Shopify + FileMaker  ·  back to All Designerwallcoverings  ·  shopify-push: portable Shopify-lib resolution (env/mac3/co-l de111d4 →