NeahNew/lib/constants/refresh-intervals.ts
2026-01-06 13:02:07 +01:00

66 lines
2.2 KiB
TypeScript

/**
* Standard Refresh Intervals
* All intervals in milliseconds
*
* These intervals are harmonized across all widgets and notifications
* to prevent redundant API calls and ensure consistent user experience.
*/
export const REFRESH_INTERVALS = {
// High priority - real-time updates
NOTIFICATIONS: 30000, // 30 seconds (reduced from 60s for better UX)
NOTIFICATIONS_COUNT: 30000, // 30 seconds (synchronized with notifications)
PAROLE: 30000, // 30 seconds (chat messages - unchanged)
NAVBAR_TIME: 1000, // 1 second (navigation bar time display - real-time)
// Medium priority - frequent but not real-time
EMAIL: 60000, // 1 minute (was manual only - now auto-refresh)
DUTIES: 120000, // 2 minutes (was manual only - now auto-refresh)
// Low priority - less frequent updates
CALENDAR: 300000, // 5 minutes (unchanged - calendar events don't change often)
NEWS: 600000, // 10 minutes (was manual only - now auto-refresh)
// Minimum interval between refreshes (prevents spam)
MIN_INTERVAL: 1000, // 1 second - minimum time between same resource refreshes
} as const;
/**
* Get refresh interval for a resource
*
* @param resource - The resource identifier
* @returns The refresh interval in milliseconds
*/
export function getRefreshInterval(resource: string): number {
switch (resource) {
case 'notifications':
return REFRESH_INTERVALS.NOTIFICATIONS;
case 'notifications-count':
return REFRESH_INTERVALS.NOTIFICATIONS_COUNT;
case 'parole':
return REFRESH_INTERVALS.PAROLE;
case 'navbar-time':
return REFRESH_INTERVALS.NAVBAR_TIME;
case 'email':
return REFRESH_INTERVALS.EMAIL;
case 'duties':
return REFRESH_INTERVALS.DUTIES;
case 'calendar':
return REFRESH_INTERVALS.CALENDAR;
case 'news':
return REFRESH_INTERVALS.NEWS;
default:
return 60000; // Default: 1 minute
}
}
/**
* Convert interval to human-readable format
*/
export function formatInterval(ms: number): string {
if (ms < 1000) return `${ms}ms`;
if (ms < 60000) return `${Math.floor(ms / 1000)}s`;
if (ms < 3600000) return `${Math.floor(ms / 60000)}m`;
return `${Math.floor(ms / 3600000)}h`;
}