/** * Hook to return image URL for display * Service Worker handles all caching transparently * Images are cached on first load and available offline automatically * * @param imageUrl - The URL of the image to display * @returns The image URL (Service Worker handles caching) */ export function useImageCache( imageUrl: string | undefined ): string | undefined { // Service Worker handles everything - just return the URL as-is // The Service Worker will intercept fetch requests and cache them // Make sure images use standard tags for SW interception return imageUrl } /** * Pre-load image to ensure it's cached by Service Worker * Triggers a fetch so the SW can cache it even if not visible yet */ export function useCacheImageOnLoad( imageUrl: string | undefined ): void { // Service Worker will cache on first fetch // This hook is now a no-op, kept for API compatibility // The browser will automatically fetch and cache images when they're used in tags void imageUrl } /** * Preload an image URL to ensure it's cached by the Service Worker * This is useful when loading content from cache - we want to ensure * images are cached before going offline */ export function preloadImage(imageUrl: string | undefined): void { if (!imageUrl) { return } // Create a link element with rel=prefetch or use Image object to trigger fetch // Service Worker will intercept and cache the request const img = new Image() img.src = imageUrl // Also try using fetch to explicitly trigger Service Worker // This ensures the image is cached even if tag hasn't rendered yet fetch(imageUrl, { mode: 'no-cors' }).catch(() => { // Ignore errors - image might not be CORS-enabled, but SW will still cache it // The Image() approach above will work for most cases }) }