diff --git a/Packages/Timeline/Sources/Timeline/TimelineView.swift b/Packages/Timeline/Sources/Timeline/TimelineView.swift index ef1a2d56..14620c86 100644 --- a/Packages/Timeline/Sources/Timeline/TimelineView.swift +++ b/Packages/Timeline/Sources/Timeline/TimelineView.swift @@ -109,17 +109,31 @@ public struct TimelineView: View { @ViewBuilder private func makePendingNewPostsView(proxy: ScrollViewProxy) -> some View { if !viewModel.pendingStatuses.isEmpty { - Button { - withAnimation { - proxy.scrollTo(Constants.scrollToTop) - viewModel.displayPendingStatuses() + HStack(spacing: 6) { + Button { + withAnimation { + proxy.scrollTo(Constants.scrollToTop) + viewModel.displayPendingStatuses() + } + } label: { + Text(viewModel.pendingStatusesButtonTitle) + } + .buttonStyle(.bordered) + .background(.thinMaterial) + .cornerRadius(8) + if viewModel.pendingStatuses.count > 1 { + Button { + withAnimation { + viewModel.dequeuePendingStatuses() + } + } label: { + Image(systemName: "play.square.stack") + } + .buttonStyle(.bordered) + .background(.thinMaterial) + .cornerRadius(8) } - } label: { - Text(viewModel.pendingStatusesButtonTitle) } - .buttonStyle(.bordered) - .background(.thinMaterial) - .cornerRadius(8) .padding(.top, 6) } } diff --git a/Packages/Timeline/Sources/Timeline/TimelineViewModel.swift b/Packages/Timeline/Sources/Timeline/TimelineViewModel.swift index cece8245..c76c643a 100644 --- a/Packages/Timeline/Sources/Timeline/TimelineViewModel.swift +++ b/Packages/Timeline/Sources/Timeline/TimelineViewModel.swift @@ -179,4 +179,13 @@ class TimelineViewModel: ObservableObject, StatusesFetcher { pendingStatuses = [] statusesState = .display(statuses: statuses, nextPageState: .hasNextPage) } + + func dequeuePendingStatuses() { + guard timeline == .home else { return } + if pendingStatuses.count > 1 { + let status = pendingStatuses.removeLast() + statuses.insert(status, at: 0) + } + statusesState = .display(statuses: statuses, nextPageState: .hasNextPage) + } }