IceCubesApp/Packages/Timeline/Sources/Timeline/TimelineView.swift

54 lines
1.2 KiB
Swift
Raw Normal View History

2022-11-21 08:31:32 +00:00
import SwiftUI
import Network
public struct TimelineView: View {
2022-11-25 11:00:01 +00:00
@StateObject private var viewModel: TimelineViewModel
2022-11-21 08:31:32 +00:00
2022-11-25 11:00:01 +00:00
public init(client: Client) {
_viewModel = StateObject(wrappedValue: TimelineViewModel(client: client))
2022-11-21 08:31:32 +00:00
}
public var body: some View {
2022-11-25 11:00:01 +00:00
List {
switch viewModel.state {
case .loading:
loadingRow
2022-11-25 11:01:55 +00:00
case let .error(error):
Text(error.localizedDescription)
2022-11-25 11:00:01 +00:00
case let .display(statuses, nextPageState):
ForEach(statuses) { status in
StatusRowView(status: status)
}
switch nextPageState {
case .hasNextPage:
loadingRow
.onAppear {
Task {
await viewModel.loadNextPage()
}
}
case .loadingNextPage:
loadingRow
}
}
2022-11-21 08:31:32 +00:00
}
.listStyle(.plain)
2022-11-25 11:00:01 +00:00
.navigationTitle("Public Timeline: \(viewModel.serverName)")
.navigationBarTitleDisplayMode(.inline)
2022-11-21 08:31:32 +00:00
.task {
2022-11-25 11:00:01 +00:00
await viewModel.refreshTimeline()
}
.refreshable {
2022-11-25 11:00:01 +00:00
await viewModel.refreshTimeline()
}
}
2022-11-25 11:00:01 +00:00
private var loadingRow: some View {
HStack {
Spacer()
ProgressView()
Spacer()
2022-11-21 08:31:32 +00:00
}
}
}