1import SwiftUI23struct WallpaperGrid: View {4 let wallpapers: [Wallpaper]5 @ObservedObject var appState: AppState6 let onEndReached: (() -> Void)?78 var body: some View {9 ScrollView {10 LazyVGrid(columns: [GridItem(.adaptive(minimum: 140), spacing: 12)], spacing: 12) {11 ForEach(wallpapers) { wallpaper in12 WallpaperItem(wallpaper: wallpaper) { Task { await set(wallpaper) } }13 .onAppear {14 if wallpaper == wallpapers.last {15 onEndReached?()16 }17 }18 }19 }20 .padding(12)2122 if appState.isLoading && !appState.wallpapers.isEmpty {23 ProgressView()24 .padding()25 }26 }27 .refreshable { await refresh() }28 }2930 func set(_ wallpaper: Wallpaper) async { await appState.setWallpaper(wallpaper) }31 func refresh() async { await appState.fetchWallpapers(reset: true, refreshing: true) }32}