← back to Recycledwallpaper
Wire sort select to API: hydrate from localStorage before first load
e5f25ed6d7cc02025dd4e9222b5578b6130ade14 · 2026-05-19 07:56:14 -0700 · Steve Abrams
- state.sort hydrated from localStorage at definition (before first grid load).
- loadGridPage() now sends sort param so server sort is honored.
- sort select reflects saved value; change handler persists + reloads.
- window.open external link gets noopener,noreferrer.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Files touched
Diff
commit e5f25ed6d7cc02025dd4e9222b5578b6130ade14
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Tue May 19 07:56:14 2026 -0700
Wire sort select to API: hydrate from localStorage before first load
- state.sort hydrated from localStorage at definition (before first grid load).
- loadGridPage() now sends sort param so server sort is honored.
- sort select reflects saved value; change handler persists + reloads.
- window.open external link gets noopener,noreferrer.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
---
public/index.html | 21 +++++++++++++--------
1 file changed, 13 insertions(+), 8 deletions(-)
diff --git a/public/index.html b/public/index.html
index 30d41d6..47d4775 100644
--- a/public/index.html
+++ b/public/index.html
@@ -389,13 +389,17 @@ textarea:focus-visible,
const isCurrent = n.dataset.slug === SLUG;
n.querySelector('circle').setAttribute('fill-opacity', isCurrent ? '1' : '0.55');
});
- n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank'));
+ n.addEventListener('click', () => window.open('https://' + n.dataset.slug + '.com', '_blank', 'noopener,noreferrer'));
});
})();
</script>
<script>
-const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false };
+const SORT_KEY = location.hostname.replace(/\./g, '_') + '_sort';
+const VALID_SORTS = ['newest','light-dark','dark-light','wheel','color','style','sku','title','price-asc','price-desc'];
+let _savedSort = 'newest';
+try { const s = localStorage.getItem(SORT_KEY); if (s && VALID_SORTS.includes(s)) _savedSort = s; } catch(e){}
+const state = { q:'', facet:'all', page:1, pages:1, total:0, loading:false, exhausted:false, sort:_savedSort };
const LABELS = {"recycled":"Recycled","sustainable":"Sustainable"};
function escAttr(s) { return String(s == null ? '' : s).replace(/[&<>"']/g, c => ({ '&':'&','<':'<','>':'>','"':'"',"'":''' }[c])); }
@@ -508,6 +512,7 @@ async function loadGridPage() {
const params = new URLSearchParams({ page:state.page, limit:24 });
if (state.q) params.set('q', state.q);
if (state.facet !== 'all') params.set('aesthetic', state.facet);
+ if (state.sort && state.sort !== 'newest') params.set('sort', state.sort);
let data;
try {
const r = await fetch('/api/products?' + params);
@@ -835,17 +840,17 @@ loadGridPage();
})();
-// DW STANDARD sort-select wire-up (added by fleet patcher)
+// DW STANDARD sort-select wire-up — hydrates from saved state.sort, persists + reloads grid.
(function(){
const sortSel = document.getElementById('sortSelect');
if (!sortSel) return;
- const KEY = location.hostname.replace(/\./g, '_') + '_sort';
- const saved = localStorage.getItem(KEY);
- if (saved) { try { sortSel.value = saved; } catch(e){} }
- if (typeof state !== 'undefined') state.sort = sortSel.value;
+ // Reflect the value already hydrated into state before the first grid load.
+ if (typeof state !== 'undefined' && state.sort) {
+ try { sortSel.value = state.sort; } catch(e){}
+ }
sortSel.addEventListener('change', e => {
const v = e.target.value;
- try { localStorage.setItem(KEY, v); } catch(e){}
+ try { localStorage.setItem(SORT_KEY, v); } catch(e){}
if (typeof state !== 'undefined') state.sort = v;
if (typeof resetGrid === 'function') resetGrid();
else location.reload();
← 70cfb8b Add .bak/.pre- 404-guard, clean-URL nav routes, explicit fac
·
back to Recycledwallpaper
·
Untrack editor snapshot files; broaden .gitignore d9e1d6a →