summaryrefslogtreecommitdiff
path: root/Sora/Views/Post/Grid/PostGridView.swift
diff options
context:
space:
mode:
authorFuwn <[email protected]>2025-03-12 01:49:11 -0700
committerFuwn <[email protected]>2025-03-12 01:49:11 -0700
commita30ee55976b5e80f48826e3e8e490761ce0a2410 (patch)
tree2c3b27971bff80749a80ee48263b751ec852c747 /Sora/Views/Post/Grid/PostGridView.swift
parentfeat: Development commit (diff)
downloadsora-testing-a30ee55976b5e80f48826e3e8e490761ce0a2410.tar.xz
sora-testing-a30ee55976b5e80f48826e3e8e490761ce0a2410.zip
feat: Development commit
Diffstat (limited to 'Sora/Views/Post/Grid/PostGridView.swift')
-rw-r--r--Sora/Views/Post/Grid/PostGridView.swift131
1 files changed, 73 insertions, 58 deletions
diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift
index dc6546d..a03463b 100644
--- a/Sora/Views/Post/Grid/PostGridView.swift
+++ b/Sora/Views/Post/Grid/PostGridView.swift
@@ -3,9 +3,11 @@ import WaterfallGrid
struct PostGridView: View {
@EnvironmentObject var settings: SettingsManager
- @EnvironmentObject var manager: BooruManager
+ @ObservedObject var manager: BooruManager
@State private var isSearchHistoryPresented = false
@Binding var selectedTab: Int
+ let isActive: Bool
+ @Binding var selectedPost: (post: BooruPost?, manager: BooruManager?)
@Environment(\.isSearching)
private var isSearching
@@ -29,77 +31,84 @@ struct PostGridView: View {
.gridStyle(columns: settings.thumbnailGridColumns)
.padding(8)
}
- .searchable(text: $manager.searchText, prompt: "Tags")
- .searchSuggestions {
- if settings.searchSuggestionsMode != .disabled {
- SearchSuggestionsView(
- items: searchSuggestionsItems(),
- searchText: $manager.searchText
- )
+ #if os(macOS)
+ .searchable(text: $manager.searchText, prompt: "Tags")
+ .searchSuggestions {
+ if settings.searchSuggestionsMode != .disabled {
+ SearchSuggestionsView(
+ items: searchSuggestionsItems(),
+ searchText: $manager.searchText
+ )
+ }
}
- }
- .onSubmit(of: .search) {
- manager.performSearch(settings: settings)
- }
- .navigationDestination(for: BooruPost.self) { post in
- PostDetailsView(post: post)
- }
- .onChange(of: manager.searchText) { _, _ in
- if manager.searchText.isEmpty, !isSearching {
- Task { manager.performSearch() }
+ .onSubmit(of: .search) {
+ manager.performSearch(settings: settings)
}
- }
+ .navigationDestination(for: BooruPost.self) { post in
+ PostDetailsView(post: post, manager: manager)
+ }
+ .onChange(of: manager.searchText) { _, _ in
+ if manager.searchText.isEmpty, !isSearching {
+ Task { manager.performSearch() }
+ }
+ }
+ #endif
.toolbar {
- #if os(macOS)
- ToolbarItem {
- Button(action: {
- Task {
- await manager.fetchPosts(page: 1, tags: manager.tags, replace: true)
+ if isActive {
+ #if os(macOS)
+ ToolbarItem {
+ Button(action: {
+ Task {
+ await manager.fetchPosts(page: 1, tags: manager.tags, replace: true)
+ }
+ }) {
+ Label("Refresh", systemImage: "arrow.clockwise")
}
- }) {
- Label("Refresh", systemImage: "arrow.clockwise")
+ .disabled(manager.isLoading)
}
- .disabled(manager.isLoading)
- }
- #endif
+ #endif
- #if os(macOS)
- ToolbarItem {
- Button(action: { Task { manager.loadNextPage() } }) {
- Label("Manually Load Next Page", systemImage: "arrow.triangle.2.circlepath")
+ #if os(macOS)
+ ToolbarItem {
+ Button(action: { Task { manager.loadNextPage() } }) {
+ Label("Manually Load Next Page", systemImage: "arrow.triangle.2.circlepath")
+ }
+ .disabled(manager.isLoading)
}
- .disabled(manager.isLoading)
- }
- #else
- ToolbarItem(placement: .bottomBar) {
- Button(action: { Task { manager.loadNextPage() } }) {
- Label("Manually Load Next Page", systemImage: "arrow.triangle.2.circlepath")
+ #else
+ ToolbarItem(placement: .bottomBar) {
+ Button(action: { Task { manager.loadNextPage() } }) {
+ Label("Manually Load Next Page", systemImage: "arrow.triangle.2.circlepath")
+ }
+ .disabled(manager.isLoading)
}
- .disabled(manager.isLoading)
- }
- ToolbarItem(placement: .bottomBar) {
- Button(action: { Task { isSearchHistoryPresented.toggle() } }) {
- Label("Search History", systemImage: "clock.arrow.circlepath")
+ ToolbarItem(placement: .bottomBar) {
+ Button(action: { Task { isSearchHistoryPresented.toggle() } }) {
+ Label("Search History", systemImage: "clock.arrow.circlepath")
+ }
}
- }
- if manager.isLoading {
- ToolbarItem {
- ProgressView()
+ if manager.isLoading {
+ ToolbarItem {
+ ProgressView()
+ }
}
- }
- #endif
-
- if !manager.tags.isEmpty {
- #if os(macOS)
- ToolbarItem { PostGridBookmarkButtonView() }
- #else
- ToolbarItem(placement: .bottomBar) { PostGridBookmarkButtonView() }
#endif
+
+ if !manager.tags.isEmpty {
+ #if os(macOS)
+ ToolbarItem { PostGridBookmarkButtonView() }
+ #else
+ ToolbarItem(placement: .bottomBar) { PostGridBookmarkButtonView() }
+ #endif
+ }
}
}
.navigationTitle("Posts")
+ #if !os(macOS)
+ .navigationBarTitleDisplayMode(.inline)
+ #endif
.refreshable {
await manager.fetchPosts(page: 1, tags: manager.tags, replace: true)
}
@@ -116,13 +125,19 @@ struct PostGridView: View {
private func waterfallGridContent(post: BooruPost) -> some View {
Button {
- manager.selectedPost = post
+ if isActive {
+ selectedPost.post = post
+ selectedPost.manager = manager
+ }
} label: {
PostGridThumbnailView(post: post, posts: filteredPosts)
}
.buttonStyle(PlainButtonStyle())
.contextMenu {
- Button(action: { manager.selectedPost = post }) {
+ Button(action: {
+ selectedPost.post = post
+ selectedPost.manager = manager
+ }) {
Label("Select Post", systemImage: "arrow.right.circle")
}
}