WallpaperGrid.swift

914 B · raw

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}