35 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			35 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Swift
		
	
	
	
	
	
| import SwiftUI
 | |
| 
 | |
| struct ImageViewer: View {
 | |
|     let imageUrl: URL
 | |
|     @EnvironmentObject var appState: AppState
 | |
|     @StateObject private var imageLoader = ImageLoader()
 | |
| 
 | |
|     var body: some View {
 | |
|         Group {
 | |
|             if imageLoader.isLoading {
 | |
|                 ProgressView()
 | |
|             } else if let image = imageLoader.image {
 | |
|                 image
 | |
|                     .resizable()
 | |
|                     .aspectRatio(contentMode: .fit)
 | |
|                     .frame(maxWidth: .infinity, maxHeight: .infinity)
 | |
|                     .scaledToFit()
 | |
|             } else if let errorMessage = imageLoader.errorMessage {
 | |
|                 Text("Failed to load image: \(errorMessage)")
 | |
|                     .font(.caption)
 | |
|                     .foregroundColor(.red)
 | |
|             } else {
 | |
|                 Text("Failed to load image.")
 | |
|             }
 | |
|         }
 | |
|         .task(id: imageUrl) {
 | |
|             if let token = appState.token {
 | |
|                 await imageLoader.loadImage(from: imageUrl, token: token)
 | |
|             }
 | |
|         }
 | |
|         .navigationTitle("Image")
 | |
|         .navigationBarTitleDisplayMode(.inline)
 | |
|     }
 | |
| }
 |