/** * 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`; }