All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
Fixes all 542 ESLint problems in the web package to achieve 0 errors and 0 warnings. Changes: - Fixed 144 issues: nullish coalescing, return types, unused variables - Fixed 118 issues: unnecessary conditions, type safety, template literals - Fixed 79 issues: non-null assertions, unsafe assignments, empty functions - Fixed 67 issues: explicit return types, promise handling, enum comparisons - Fixed 45 final warnings: missing return types, optional chains - Fixed 25 typecheck-related issues: async/await, type assertions, formatting - Fixed JSX.Element namespace errors across 90+ files All Quality Rails violations resolved. Lint and typecheck both pass with 0 problems. Files modified: 118 components, tests, hooks, and utilities Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
70 lines
1.5 KiB
TypeScript
70 lines
1.5 KiB
TypeScript
/**
|
|
* Date formatting utilities
|
|
* Provides PDA-friendly date formatting and grouping
|
|
*/
|
|
|
|
import { format, isToday, isTomorrow, differenceInDays, isBefore } from "date-fns";
|
|
|
|
/**
|
|
* Format a date in a readable format
|
|
*/
|
|
export function formatDate(date: Date): string {
|
|
try {
|
|
return format(date, "MMM d, yyyy");
|
|
} catch {
|
|
return "Invalid Date";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Format time in 12-hour format
|
|
*/
|
|
export function formatTime(date: Date): string {
|
|
try {
|
|
return format(date, "h:mm a");
|
|
} catch {
|
|
return "Invalid Time";
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get a PDA-friendly label for date grouping
|
|
* Returns: "Today", "Tomorrow", "This Week", "Next Week", "Later"
|
|
*/
|
|
export function getDateGroupLabel(date: Date, referenceDate: Date = new Date()): string {
|
|
if (isToday(date)) {
|
|
return "Today";
|
|
}
|
|
|
|
if (isTomorrow(date)) {
|
|
return "Tomorrow";
|
|
}
|
|
|
|
const daysUntil = differenceInDays(date, referenceDate);
|
|
|
|
if (daysUntil >= 0 && daysUntil <= 7) {
|
|
return "This Week";
|
|
}
|
|
|
|
if (daysUntil > 7 && daysUntil <= 14) {
|
|
return "Next Week";
|
|
}
|
|
|
|
return "Later";
|
|
}
|
|
|
|
/**
|
|
* Check if a date has passed (PDA-friendly: "target passed" instead of "overdue")
|
|
*/
|
|
export function isPastTarget(targetDate: Date, now: Date = new Date()): boolean {
|
|
return isBefore(targetDate, now);
|
|
}
|
|
|
|
/**
|
|
* Check if a date is approaching (within 24 hours)
|
|
*/
|
|
export function isApproachingTarget(targetDate: Date, now: Date = new Date()): boolean {
|
|
const hoursUntil = differenceInDays(targetDate, now);
|
|
return hoursUntil >= 0 && hoursUntil <= 1;
|
|
}
|