import SwiftUI struct WallpaperGrid: View { let wallpapers: [Wallpaper] @ObservedObject var appState: AppState let onEndReached: (() -> Void)? var body: some View { ScrollView { LazyVGrid(columns: [GridItem(.adaptive(minimum: 140), spacing: 12)], spacing: 12) { ForEach(wallpapers) { wallpaper in WallpaperItem(wallpaper: wallpaper) { Task { await set(wallpaper) } } .onAppear { if wallpaper == wallpapers.last { onEndReached?() } } } } .padding(12) if appState.isLoading && !appState.wallpapers.isEmpty { ProgressView() .padding() } } .refreshable { await refresh() } } func set(_ wallpaper: Wallpaper) async { await appState.setWallpaper(wallpaper) } func refresh() async { await appState.fetchWallpapers(reset: true, refreshing: true) } }