/** * React Query Hook for Downloading Files * Provides caching and state management for file downloads */ import type { DownloadFileRequest, DownloadFileResponse, ServiceOptions, QueryKey, UseQueryResult, ApiQueryOptions } from '@plyaz/types/api'; import type { ErrorResponse } from '@plyaz/types/errors'; import type { EndpointsList } from '@/api/endpoints'; /** * Hook for downloading a file * * @param queryKey - React Query cache key * @param request - Request with file ID * @param serviceOptions - Optional service options (apiClient override, apiConfig override) * @param queryOptions - Optional React Query options (enabled, staleTime, etc.) * @returns React Query result with download data * * @example * ```typescript * function FileViewer({ fileId }: Props) { * const { data, isLoading, error } = useDownloadFile( * ['file', fileId], * { id: fileId }, * undefined, * { enabled: !!fileId } * ); * * if (isLoading) return ; * if (error) return ; * * // Convert base64 to blob URL * const blob = new Blob([ * Uint8Array.from(atob(data.buffer), c => c.charCodeAt(0)) * ], { type: data.mimeType }); * const blobUrl = URL.createObjectURL(blob); * * return