feat: One day only

This commit is contained in:
Brennan Wilkes (Text Groove) 2026-01-21 20:30:56 -08:00
parent a199640724
commit 7b7bf44dd3
2 changed files with 70 additions and 20 deletions

View file

@ -17,9 +17,38 @@ export function esc(s) {
export function prettyTs(iso) {
const s = String(iso || "");
if (!s) return "";
return s.replace("T", " ");
const d = new Date(s);
if (!Number.isFinite(d.getTime())) return "";
const parts = new Intl.DateTimeFormat("en-US", {
timeZone: "America/Vancouver",
month: "long",
day: "numeric",
hour: "numeric",
minute: "2-digit",
hour12: true,
}).formatToParts(d);
let month = "";
let day = "";
let hour = "";
let minute = "";
let dayPeriod = "";
for (const p of parts) {
if (p.type === "month") month = p.value;
else if (p.type === "day") day = p.value;
else if (p.type === "hour") hour = p.value;
else if (p.type === "minute") minute = p.value;
else if (p.type === "dayPeriod") dayPeriod = p.value;
}
const ampm = String(dayPeriod || "").toLowerCase(); // "am"/"pm"
return `${month} ${day} ${hour}:${minute}${ampm}`;
}
export function renderThumbHtml(imgUrl, cls = "thumb") {
const img = normImg(imgUrl);
if (!img) return `<div class="thumbPlaceholder"></div>`;

View file

@ -216,22 +216,43 @@ export function renderSearch($app) {
const canon = typeof canonicalSkuFn === "function" ? canonicalSkuFn : (x) => x;
const days = Number.isFinite(Number(recent?.windowDays)) ? Number(recent.windowDays) : 3;
const nowMs = Date.now();
const cutoffMs = nowMs - 24 * 60 * 60 * 1000;
function eventMs(r) {
const t = String(r?.ts || "");
const ms = t ? Date.parse(t) : NaN;
if (Number.isFinite(ms)) return ms;
// fallback: date-only => treat as start of day UTC-ish
const d = String(r?.date || "");
const ms2 = d ? Date.parse(d + "T00:00:00Z") : NaN;
return Number.isFinite(ms2) ? ms2 : 0;
}
const inWindow = items.filter((r) => {
const ms = eventMs(r);
return ms >= cutoffMs && ms <= nowMs;
});
if (!inWindow.length) {
$results.innerHTML = `<div class="small">No changes in the last 24 hours.</div>`;
return;
}
// rank + sort (custom)
const ranked = items
const ranked = inWindow
.map((r) => ({ r, meta: rankRecent(r, canon) }))
.sort((a, b) => {
if (b.meta.score !== a.meta.score) return b.meta.score - a.meta.score;
if (b.meta.tie !== a.meta.tie) return b.meta.tie - a.meta.tie;
// stable-ish fallback
return String(a.meta.sku || "").localeCompare(String(b.meta.sku || ""));
});
const limited = ranked.slice(0, 140);
$results.innerHTML =
`<div class="small">Recently changed (last ${esc(days)} day(s)):</div>` +
`<div class="small">Recently changed (last 24 hours):</div>` +
limited
.map(({ r, meta }) => {
const kindLabel =