-
{
feedItems.contents.map((item) => (
-
{new Date(item.pubIsoDate).toDateString()} | {item.feedName} | {item.category} {Boolean(yazzyUrl) ? ( <> | yazzy > ) : null}
))
}
--- import getAllFeedItems from "../services/feeds"; function isRecent(date: number): boolean { const now = Date.now(); const sixHours = 6 * 60 * 60 * 1000; return now - date < sixHours; } const yazzyUrl = import.meta.env.YAZZY_URL; const feedItems = await getAllFeedItems(); const categories = [ "All", "Recent", ...Array.from( new Set(feedItems.contents.map((item) => item.category)), ).sort(), ]; const categoryCounts = categories.reduce((acc, category) => { if (category === "All") { acc[category] = feedItems.contents.length; return acc; } acc[category] = feedItems.contents.filter( (item) => item.category === category, ).length; return acc; }, {}); const accentColors = { slate: { bg: "bg-slate-200 dark:bg-slate-600", bl: "border-l-slate-200 dark:border-l-slate-600", }, stone: { bg: "bg-stone-200 dark:bg-stone-600", bl: "border-l-stone-200 dark:border-l-stone-600", }, red: { bg: "bg-red-200 dark:bg-red-600", bl: "border-l-red-200 dark:border-l-red-600", }, amber: { bg: "bg-amber-200 dark:bg-amber-600", bl: "border-l-amber-200 dark:border-l-amber-600", }, lime: { bg: "bg-lime-200 dark:bg-lime-600", bl: "border-l-lime-200 dark:border-l-lime-600", }, emerald: { bg: "bg-emerald-200 dark:bg-emerald-600", bl: "border-l-emerald-200 dark:border-l-emerald-600", }, cyan: { bg: "bg-cyan-200 dark:bg-cyan-600", bl: "border-l-cyan-200 dark:border-l-cyan-600", }, sky: { bg: "bg-sky-200 dark:bg-sky-600", bl: "border-l-sky-200 dark:border-l-sky-600", }, indigo: { bg: "bg-indigo-200 dark:bg-indigo-600", bl: "border-l-indigo-200 dark:border-l-indigo-600", }, fuchsia: { bg: "bg-fuchsia-200 dark:bg-fuchsia-600", bl: "border-l-fuchsia-200 dark:border-l-fuchsia-600", }, pink: { bg: "bg-pink-200 dark:bg-pink-600", bl: "border-l-pink-200 dark:border-l-pink-600", }, rose: { bg: "bg-rose-200 dark:bg-rose-600", bl: "border-l-rose-200 dark:border-l-rose-600", }, }; const pickRandomAccentColor = () => { const accentColorsKeys = Object.keys(accentColors); const index = Math.floor(Math.random() * accentColorsKeys.length); return accentColors[accentColorsKeys[index]]; }; const categoryColors = categories.reduce((acc, category) => { acc[category] = pickRandomAccentColor(); return acc; }, {}); const categoriesSelectorCss = categories .filter((c) => c !== "All") .map( (c) => ` #category-picker:has(#${c}:checked) ~ main ul { > .${c}-item { display: block; } > *:not(.${c}-item) { display: none; } }`, ) .join("\n"); ---