* feat(jobs): voeg lib/jobs-time-filter.ts toe met tijdvenster-predikaat Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(user-settings): voeg views.jobs.timeFilter toe aan UserSettingsSchema Breidt ViewsPrefs uit met een jobs-object (JobsViewPrefs) dat timeFilter accepteert met waarden '1h' | '24h' | 'all'. ViewsPrefs blijft .strict(). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * test(jobs-time-filter): voeg unit-tests toe voor isWithinTimeWindow en UserSettings-schema Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(jobs-time-filter): voeg JobsTimeFilterControl component toe Nieuw client-component dat views.jobs.timeFilter leest/schrijft via useUserSettingsStore met pill-stijl (MD3-tokens). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(jobs): wire JobsTimeFilter in jobs page header Plaatst het tijdfilter-component rechts van de Jobs-kop via justify-between op de header-div. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * feat(jobs): pas tijdvenster-filter toe in JobsColumn Lees views.jobs.timeFilter uit de store en filter jobs op createdAt via isWithinTimeWindow, als eerste check vóór de bestaande kind/status-filters. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
21 lines
606 B
TypeScript
21 lines
606 B
TypeScript
export const JOBS_TIME_FILTER_VALUES = ['1h', '24h', 'all'] as const;
|
|
|
|
export type JobsTimeFilter = (typeof JOBS_TIME_FILTER_VALUES)[number];
|
|
|
|
export const DEFAULT_JOBS_TIME_FILTER: JobsTimeFilter = 'all';
|
|
|
|
const WINDOW_MS: Record<'1h' | '24h', number> = {
|
|
'1h': 60 * 60 * 1000,
|
|
'24h': 24 * 60 * 60 * 1000,
|
|
};
|
|
|
|
export function isWithinTimeWindow(
|
|
createdAt: Date | string,
|
|
filter: JobsTimeFilter,
|
|
now: number = Date.now(),
|
|
): boolean {
|
|
if (filter === 'all') return true;
|
|
const ts = new Date(createdAt).getTime();
|
|
if (Number.isNaN(ts)) return true;
|
|
return ts >= now - WINDOW_MS[filter];
|
|
}
|