import NetworkImage import SwiftUI struct FavoritePostThumbnailView: View { @EnvironmentObject var settings: SettingsManager let favorite: SettingsFavoritePost let onRemove: () -> Void private var thumbnailURL: URL? { switch settings.thumbnailQuality { case .preview: favorite.previewUrl.flatMap(URL.init) case .sample: favorite.previewUrl.flatMap(URL.init) case .original: favorite.fileUrl.flatMap(URL.init) } } @ViewBuilder private func primaryImageContent(image: Image) -> some View { let isFiltered = settings.blurRatings.contains(favorite.rating) image .resizable() .aspectRatio(contentMode: .fit) .blur(radius: isFiltered ? 8 : 0) .clipped() .animation(.default, value: isFiltered) .clipShape(RoundedRectangle(cornerRadius: 8)) } @ViewBuilder private func imageContent(image: Image) -> some View { if settings.uniformThumbnailGrid { GeometryReader { proxy in primaryImageContent(image: image) .frame(width: proxy.size.width, height: proxy.size.width) } .clipped() .aspectRatio(1, contentMode: .fit) } else { primaryImageContent(image: image) } } var body: some View { NetworkImage( url: thumbnailURL, transaction: Transaction(animation: .default) ) { image in imageContent(image: image) } placeholder: { PostGridThumbnailPlaceholderView() } } } #Preview { let sampleFavorite = SettingsFavoritePost( post: BooruPost( id: "123", height: 100, score: "10", fileURL: URL(string: "https://example.com/file.jpg")!, parentID: "0", sampleURL: URL(string: "https://example.com/sample.jpg")!, sampleWidth: 100, sampleHeight: 100, previewURL: URL(string: "https://example.com/preview.jpg")!, rating: .safe, tags: ["sample", "test"], width: 100, change: nil, md5: "abc123", creatorID: "1", authorID: nil, createdAt: Date(), status: "active", source: "", previewWidth: 100, previewHeight: 100 ), provider: .yandere ) FavoritePostThumbnailView(favorite: sampleFavorite) { () } .environmentObject(SettingsManager()) }