From 7403b6143b834174345ee300faad4f82fcee5461 Mon Sep 17 00:00:00 2001 From: Fuwn Date: Tue, 24 Jun 2025 05:58:43 -0700 Subject: feat: Development commit --- Sora/Data/PostGridViewState.swift | 1 + Sora/Views/Post/Grid/PostGridView.swift | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/Sora/Data/PostGridViewState.swift b/Sora/Data/PostGridViewState.swift index 22cfa0d..0e0d15b 100644 --- a/Sora/Data/PostGridViewState.swift +++ b/Sora/Data/PostGridViewState.swift @@ -1,4 +1,5 @@ struct PostGridViewState { var posts: [BooruPost] = [] var currentPage: Int = 1 + var selectedPost: BooruPost? } diff --git a/Sora/Views/Post/Grid/PostGridView.swift b/Sora/Views/Post/Grid/PostGridView.swift index 5b44a10..9eef5f7 100644 --- a/Sora/Views/Post/Grid/PostGridView.swift +++ b/Sora/Views/Post/Grid/PostGridView.swift @@ -162,6 +162,11 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length updateViewState(for: queryID, currentPage: newPage) } } + .onChange(of: manager.selectedPost) { _, newPost in + let queryID = manager.searchHistory.last { $0.tags == manager.tags }?.id ?? UUID() + + updateViewState(for: queryID, selectedPost: newPost, resetSelectedPost: newPost == nil) + } .onChange(of: manager.historyIndex) { _, newIndex in guard newIndex >= 0 && newIndex < manager.searchHistory.count else { return } @@ -170,6 +175,7 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length if let state = viewStates[queryID] { manager.posts = state.posts manager.currentPage = state.currentPage + manager.selectedPost = state.selectedPost } else { manager.posts = [] manager.currentPage = 1 @@ -341,7 +347,9 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length private func updateViewState( for queryID: UUID, posts: [BooruPost] = [], - currentPage: Int? = nil + currentPage: Int? = nil, + selectedPost: BooruPost? = nil, + resetSelectedPost: Bool = false ) { var state = viewStates[queryID] ?? PostGridViewState() @@ -349,6 +357,12 @@ struct PostGridView: View { // swiftlint:disable:this type_body_length if let currentPage { state.currentPage = currentPage } + if let selectedPost { + state.selectedPost = selectedPost + } else if resetSelectedPost { + state.selectedPost = nil + } + viewStates[queryID] = state } } -- cgit v1.2.3