summaryrefslogtreecommitdiff
path: root/Sora/Views/Post/Details/Carousel
diff options
context:
space:
mode:
Diffstat (limited to 'Sora/Views/Post/Details/Carousel')
-rw-r--r--Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift50
-rw-r--r--Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift15
2 files changed, 33 insertions, 32 deletions
diff --git a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift
index 9d2d95e..fc39ca3 100644
--- a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift
+++ b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselItemView.swift
@@ -1,8 +1,6 @@
import SwiftUI
struct PostDetailsCarouselItemView: View {
- var post: BooruPost
- var manager: BooruManager
var index: Int
@Binding var loadingStage: BooruPostLoadingState
var imageURL: (BooruPost) -> URL?
@@ -15,33 +13,35 @@ struct PostDetailsCarouselItemView: View {
return Color.gray
#endif
}
+ @Binding var selectedPost: (post: BooruPost?, manager: BooruManager?)
var body: some View {
- ZStack {
- PostDetailsImageView(
- url: post.previewURL,
- loadingStage: $loadingStage,
- manager: manager
- ) {
- GeometryReader { geometry in
- ProgressView()
- .frame(width: geometry.size.width, height: geometry.size.height)
- .position(x: geometry.size.width / 2, y: geometry.size.height / 2)
- .padding()
+ if let post = selectedPost.post {
+ ZStack {
+ PostDetailsImageView(
+ url: post.previewURL,
+ loadingStage: $loadingStage,
+ selectedPost: $selectedPost
+ ) {
+ GeometryReader { geometry in
+ ProgressView()
+ .frame(width: geometry.size.width, height: geometry.size.height)
+ .position(x: geometry.size.width / 2, y: geometry.size.height / 2)
+ .padding()
+ }
}
+
+ PostDetailsImageView(
+ url: imageURL(post),
+ loadingStage: $loadingStage,
+ selectedPost: $selectedPost,
+ finalLoadingState: .loaded
+ )
+ .background(
+ loadingStage == .loaded ? systemBackgroundColor : Color.clear
+ )
}
-
- PostDetailsImageView(
- url: imageURL(post),
- loadingStage: $loadingStage,
- manager: manager,
- finalLoadingState: .loaded,
- post: post
- )
- .background(
- loadingStage == .loaded ? systemBackgroundColor : Color.clear
- )
+ .tag(index)
}
- .tag(index)
}
}
diff --git a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift
index 88714c3..3ead408 100644
--- a/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift
+++ b/Sora/Views/Post/Details/Carousel/PostDetailsCarouselView.swift
@@ -1,24 +1,24 @@
import SwiftUI
struct PostDetailsCarouselView: View {
- @ObservedObject var manager: BooruManager
@EnvironmentObject var settings: SettingsManager
let posts: [BooruPost]
let focusedPost: BooruPost?
@Binding var loadingStage: BooruPostLoadingState
@State private var currentIndex: Int
private let cacheManager = ImageCacheManager.shared
+ @Binding var selectedPost: (post: BooruPost?, manager: BooruManager?)
init(
posts: [BooruPost],
loadingStage: Binding<BooruPostLoadingState>,
focusedPost: BooruPost? = nil,
- manager: ObservedObject<BooruManager>
+ selectedPost: Binding<(post: BooruPost?, manager: BooruManager?)>
) {
self.posts = posts
self.focusedPost = focusedPost
_loadingStage = loadingStage
- _manager = manager
+ _selectedPost = selectedPost
if let focused = focusedPost,
let index = posts.firstIndex(where: { $0.id == focused.id })
@@ -46,18 +46,19 @@ struct PostDetailsCarouselView: View {
TabView(selection: $currentIndex) {
ForEach(Array(posts.enumerated()), id: \.offset) { index, post in
PostDetailsCarouselItemView(
- post: post,
- manager: manager,
index: index,
loadingStage: $loadingStage,
- imageURL: imageURL
+ imageURL: imageURL,
+ selectedPost: $selectedPost
)
}
}
.onChange(of: currentIndex) {
+ guard let manager = selectedPost.manager else { return }
+
if currentIndex == posts.count - 1 { manager.loadNextPage() }
- manager.selectedPost = posts[currentIndex]
+ selectedPost.post = posts[currentIndex]
preloadNearbyImages()
}