mirror of
https://github.com/Dimillian/IceCubesApp.git
synced 2024-06-10 17:29:21 +00:00
Status detail animation finally right
This commit is contained in:
parent
c4e4339d4a
commit
1e5e1e864e
|
@ -45,9 +45,8 @@ public struct StatusDetailView: View {
|
||||||
case .loading:
|
case .loading:
|
||||||
loadingDetailView
|
loadingDetailView
|
||||||
|
|
||||||
case let .display(statuses, date):
|
case let .display(statuses):
|
||||||
makeStatusesListView(statuses: statuses, date: date)
|
makeStatusesListView(statuses: statuses)
|
||||||
.id(date)
|
|
||||||
|
|
||||||
if !isLoaded {
|
if !isLoaded {
|
||||||
loadingContextView
|
loadingContextView
|
||||||
|
@ -101,7 +100,7 @@ public struct StatusDetailView: View {
|
||||||
.navigationBarTitleDisplayMode(.inline)
|
.navigationBarTitleDisplayMode(.inline)
|
||||||
}
|
}
|
||||||
|
|
||||||
private func makeStatusesListView(statuses: [Status], date _: Date) -> some View {
|
private func makeStatusesListView(statuses: [Status]) -> some View {
|
||||||
ForEach(statuses) { status in
|
ForEach(statuses) { status in
|
||||||
let isReplyToPrevious = viewModel.isReplyToPreviousCache[status.id] ?? false
|
let isReplyToPrevious = viewModel.isReplyToPreviousCache[status.id] ?? false
|
||||||
let viewModel: StatusRowViewModel = .init(status: status,
|
let viewModel: StatusRowViewModel = .init(status: status,
|
||||||
|
|
|
@ -13,7 +13,7 @@ import SwiftUI
|
||||||
var routerPath: RouterPath?
|
var routerPath: RouterPath?
|
||||||
|
|
||||||
enum State {
|
enum State {
|
||||||
case loading, display(statuses: [Status], date: Date), error(error: Error)
|
case loading, display(statuses: [Status]), error(error: Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
var state: State = .loading
|
var state: State = .loading
|
||||||
|
@ -29,7 +29,7 @@ import SwiftUI
|
||||||
}
|
}
|
||||||
|
|
||||||
init(status: Status) {
|
init(status: Status) {
|
||||||
state = .display(statuses: [status], date: Date())
|
state = .display(statuses: [status])
|
||||||
title = "status.post-from-\(status.account.displayNameWithoutEmojis)"
|
title = "status.post-from-\(status.account.displayNameWithoutEmojis)"
|
||||||
statusId = status.id
|
statusId = status.id
|
||||||
remoteStatusURL = nil
|
remoteStatusURL = nil
|
||||||
|
@ -86,11 +86,11 @@ import SwiftUI
|
||||||
|
|
||||||
if animate {
|
if animate {
|
||||||
withAnimation {
|
withAnimation {
|
||||||
state = .display(statuses: statuses, date: Date())
|
state = .display(statuses: statuses)
|
||||||
isLoadingContext = false
|
isLoadingContext = false
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
state = .display(statuses: statuses, date: Date())
|
state = .display(statuses: statuses)
|
||||||
isLoadingContext = false
|
isLoadingContext = false
|
||||||
scrollToId = statusId
|
scrollToId = statusId
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,7 +97,7 @@ public struct StatusRowView: View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if isFocused, isStatusDetailLoaded {
|
if isFocused {
|
||||||
StatusRowDetailView(viewModel: viewModel)
|
StatusRowDetailView(viewModel: viewModel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -288,12 +288,12 @@ import SwiftUI
|
||||||
func fetchActionsAccounts() async {
|
func fetchActionsAccounts() async {
|
||||||
guard !actionsAccountsFetched else { return }
|
guard !actionsAccountsFetched else { return }
|
||||||
do {
|
do {
|
||||||
withAnimation(.snappy) {
|
withAnimation(.smooth) {
|
||||||
actionsAccountsFetched = true
|
actionsAccountsFetched = true
|
||||||
}
|
}
|
||||||
let favoriters: [Account] = try await client.get(endpoint: Statuses.favoritedBy(id: status.id, maxId: nil))
|
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))
|
let rebloggers: [Account] = try await client.get(endpoint: Statuses.rebloggedBy(id: status.id, maxId: nil))
|
||||||
withAnimation(.snappy) {
|
withAnimation(.smooth) {
|
||||||
self.favoriters = favoriters
|
self.favoriters = favoriters
|
||||||
self.rebloggers = rebloggers
|
self.rebloggers = rebloggers
|
||||||
}
|
}
|
||||||
|
|
|
@ -106,7 +106,7 @@ struct StatusRowDetailView: View {
|
||||||
AvatarView(url: account.avatar, size: .list)
|
AvatarView(url: account.avatar, size: .list)
|
||||||
.padding(.leading, -4)
|
.padding(.leading, -4)
|
||||||
}
|
}
|
||||||
.transition(.scale)
|
.transition(.opacity)
|
||||||
}
|
}
|
||||||
.padding(.leading, .layoutPadding)
|
.padding(.leading, .layoutPadding)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue