IceCubesApp/Packages/Timeline/Sources/Timeline/TimelineView.swift
Thomas Ricouard 567cb4cc47 New Routeur
2022-11-29 11:46:02 +01:00

58 lines
1.3 KiB
Swift

import SwiftUI
import Network
public struct TimelineView: View {
@StateObject private var viewModel: TimelineViewModel
@State private var didAppear = false
public init(client: Client) {
_viewModel = StateObject(wrappedValue: TimelineViewModel(client: client))
}
public var body: some View {
List {
switch viewModel.state {
case .loading:
loadingRow
case let .error(error):
Text(error.localizedDescription)
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
}
}
}
.listStyle(.plain)
.navigationTitle("Public Timeline: \(viewModel.serverName)")
.navigationBarTitleDisplayMode(.inline)
.task {
if !didAppear {
await viewModel.refreshTimeline()
didAppear = true
}
}
.refreshable {
await viewModel.refreshTimeline()
}
}
private var loadingRow: some View {
HStack {
Spacer()
ProgressView()
Spacer()
}
}
}