mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-20 07:26:19 +00:00
feat(mentions): richer inbox — filters, date groups, type badge, relative time, per-row actions, highlighted preview
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
// Date/time helpers for the mentions box. Kept framework-free and pure so they
|
||||
// are unit-testable. Timestamps are unix SECONDS (as carried on the wire).
|
||||
|
||||
export type MentionDateGroup = 'today' | 'yesterday' | 'older';
|
||||
|
||||
const DAY_MS = 86_400_000;
|
||||
|
||||
const startOfDay = (d: Date): number => new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();
|
||||
|
||||
const pad = (n: number): string => (n < 10 ? `0${ n }` : `${ n }`);
|
||||
|
||||
/**
|
||||
* Bucket a mention timestamp into today / yesterday / older relative to `now`.
|
||||
*/
|
||||
export const getMentionDateGroup = (timestampSeconds: number, now: Date = new Date()): MentionDateGroup =>
|
||||
{
|
||||
if(!timestampSeconds || timestampSeconds <= 0) return 'older';
|
||||
|
||||
const ts = timestampSeconds * 1000;
|
||||
const todayStart = startOfDay(now);
|
||||
|
||||
if(ts >= todayStart) return 'today';
|
||||
if(ts >= (todayStart - DAY_MS)) return 'yesterday';
|
||||
|
||||
return 'older';
|
||||
};
|
||||
|
||||
/**
|
||||
* Compact per-row time label: HH:MM for today/yesterday (the section header
|
||||
* disambiguates the day), DD-MM for older entries. Empty string when unknown.
|
||||
*/
|
||||
export const formatMentionTime = (timestampSeconds: number, now: Date = new Date()): string =>
|
||||
{
|
||||
if(!timestampSeconds || timestampSeconds <= 0) return '';
|
||||
|
||||
const d = new Date(timestampSeconds * 1000);
|
||||
|
||||
if(getMentionDateGroup(timestampSeconds, now) === 'older') return `${ pad(d.getDate()) }-${ pad(d.getMonth() + 1) }`;
|
||||
|
||||
return `${ pad(d.getHours()) }:${ pad(d.getMinutes()) }`;
|
||||
};
|
||||
Reference in New Issue
Block a user