| 'use client'; |
|
|
| |
| |
| |
| |
|
|
| const CACHE_KEY = 'medos-offline-faq'; |
| const CACHE_VERSION = 1; |
|
|
| interface CachedData { |
| version: number; |
| timestamp: number; |
| faqs: Array<{ question: string; answer: string }>; |
| } |
|
|
| export function saveFAQToCache( |
| faqs: Array<{ question: string; answer: string }> |
| ): void { |
| if (typeof localStorage === 'undefined') return; |
|
|
| const data: CachedData = { |
| version: CACHE_VERSION, |
| timestamp: Date.now(), |
| faqs, |
| }; |
|
|
| try { |
| localStorage.setItem(CACHE_KEY, JSON.stringify(data)); |
| } catch { |
| |
| try { |
| localStorage.removeItem(CACHE_KEY); |
| localStorage.setItem(CACHE_KEY, JSON.stringify(data)); |
| } catch { |
| |
| } |
| } |
| } |
|
|
| export function loadFAQFromCache(): Array<{ |
| question: string; |
| answer: string; |
| }> | null { |
| if (typeof localStorage === 'undefined') return null; |
|
|
| try { |
| const raw = localStorage.getItem(CACHE_KEY); |
| if (!raw) return null; |
|
|
| const data: CachedData = JSON.parse(raw); |
| if (data.version !== CACHE_VERSION) return null; |
|
|
| |
| const thirtyDays = 30 * 24 * 60 * 60 * 1000; |
| if (Date.now() - data.timestamp > thirtyDays) return null; |
|
|
| return data.faqs; |
| } catch { |
| return null; |
| } |
| } |
|
|
| export function isOnline(): boolean { |
| if (typeof navigator === 'undefined') return true; |
| return navigator.onLine; |
| } |
|
|
| export function onConnectivityChange( |
| callback: (online: boolean) => void |
| ): () => void { |
| if (typeof window === 'undefined') return () => {}; |
|
|
| const handleOnline = () => callback(true); |
| const handleOffline = () => callback(false); |
|
|
| window.addEventListener('online', handleOnline); |
| window.addEventListener('offline', handleOffline); |
|
|
| return () => { |
| window.removeEventListener('online', handleOnline); |
| window.removeEventListener('offline', handleOffline); |
| }; |
| } |
|
|