diff options
| author | Fuwn <[email protected]> | 2025-03-12 01:49:11 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2025-03-12 01:49:11 -0700 |
| commit | a30ee55976b5e80f48826e3e8e490761ce0a2410 (patch) | |
| tree | 2c3b27971bff80749a80ee48263b751ec852c747 /Sora/Views/Post/Grid/PostGridView.swift | |
| parent | feat: Development commit (diff) | |
| download | sora-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.swift | 131 |
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") } } |