Status detail animation finally right

This commit is contained in:
Thomas Ricouard 2023-09-17 20:13:03 +02:00
parent c4e4339d4a
commit 1e5e1e864e
5 changed files with 11 additions and 12 deletions

View file

@ -45,9 +45,8 @@ public struct StatusDetailView: View {
case .loading:
loadingDetailView
case let .display(statuses, date):
makeStatusesListView(statuses: statuses, date: date)
.id(date)
case let .display(statuses):
makeStatusesListView(statuses: statuses)
if !isLoaded {
loadingContextView
@ -101,7 +100,7 @@ public struct StatusDetailView: View {
.navigationBarTitleDisplayMode(.inline)
}
private func makeStatusesListView(statuses: [Status], date _: Date) -> some View {
private func makeStatusesListView(statuses: [Status]) -> some View {
ForEach(statuses) { status in
let isReplyToPrevious = viewModel.isReplyToPreviousCache[status.id] ?? false
let viewModel: StatusRowViewModel = .init(status: status,

View file

@ -13,7 +13,7 @@ import SwiftUI
var routerPath: RouterPath?
enum State {
case loading, display(statuses: [Status], date: Date), error(error: Error)
case loading, display(statuses: [Status]), error(error: Error)
}
var state: State = .loading
@ -29,7 +29,7 @@ import SwiftUI
}
init(status: Status) {
state = .display(statuses: [status], date: Date())
state = .display(statuses: [status])
title = "status.post-from-\(status.account.displayNameWithoutEmojis)"
statusId = status.id
remoteStatusURL = nil
@ -86,11 +86,11 @@ import SwiftUI
if animate {
withAnimation {
state = .display(statuses: statuses, date: Date())
state = .display(statuses: statuses)
isLoadingContext = false
}
} else {
state = .display(statuses: statuses, date: Date())
state = .display(statuses: statuses)
isLoadingContext = false
scrollToId = statusId
}

View file

@ -97,7 +97,7 @@ public struct StatusRowView: View {
}
}
if isFocused, isStatusDetailLoaded {
if isFocused {
StatusRowDetailView(viewModel: viewModel)
}
}

View file

@ -288,12 +288,12 @@ import SwiftUI
func fetchActionsAccounts() async {
guard !actionsAccountsFetched else { return }
do {
withAnimation(.snappy) {
withAnimation(.smooth) {
actionsAccountsFetched = true
}
let favoriters: [Account] = try await client.get(endpoint: Statuses.favoritedBy(id: status.id, maxId: nil))
let rebloggers: [Account] = try await client.get(endpoint: Statuses.rebloggedBy(id: status.id, maxId: nil))
withAnimation(.snappy) {
withAnimation(.smooth) {
self.favoriters = favoriters
self.rebloggers = rebloggers
}

View file

@ -106,7 +106,7 @@ struct StatusRowDetailView: View {
AvatarView(url: account.avatar, size: .list)
.padding(.leading, -4)
}
.transition(.scale)
.transition(.opacity)
}
.padding(.leading, .layoutPadding)
}