import { toSearchParams } from '@/lib/search/query' /** * Die mitgelieferten Ansichten aus docs/08-suche-und-export.md. * * Sie stehen im Programm und nicht in der Datenbank, weil sie von der * **Gegenwart** abhängen: „diese Woche" und „seit 14 Tagen" wären als * gespeicherte Zeitpunkte schon am nächsten Tag falsch. Selbst angelegte * Ansichten sind dagegen genau das - ein Lesezeichen auf eine Adresse. */ export type BuiltinView = { key: string; params: string } export function builtinViews(now: Date = new Date()): BuiltinView[] { const inTagen = (tage: number): string => { const datum = new Date(now) datum.setDate(datum.getDate() + tage) return datum.toISOString().slice(0, 10) } return [ { key: 'mine', params: toSearchParams({ mine: true }) }, { key: 'dueThisWeek', params: toSearchParams({ dueBefore: inTagen(7) }) }, { key: 'idle', params: toSearchParams({ idleSince: new Date(now.getTime() - 14 * 86_400_000).toISOString(), status: 'OPEN', }), }, { key: 'open', params: toSearchParams({ status: 'OPEN' }) }, ] } /** * „Seit deinem letzten Besuch geändert" braucht die Lesemarke und steht * deshalb nicht in der Liste oben - die Seite ergänzt sie, wenn es eine gibt. */ export function sinceLastVisitView(lastReadAt: Date): BuiltinView { return { key: 'sinceLastVisit', params: toSearchParams({ changedSince: lastReadAt.toISOString() }) } }