krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
v2.10.3: Hutch/Views/Repositories/CommitLogView.swift · raw
1import SwiftUI
2
3struct CommitLogView: View {
4 let viewModel: RepositoryDetailViewModel
5
6 var body: some View {
7 List {
8 ForEach(viewModel.commits) { commit in
9 NavigationLink(value: commit) {
10 CommitRowView(commit: commit)
11 }
12 .task {
13 await viewModel.loadMoreCommitsIfNeeded(currentItem: commit)
14 }
15 }
16
17 if viewModel.isLoadingMoreCommits {
18 HStack {
19 Spacer()
20 ProgressView()
21 Spacer()
22 }
23 .listRowSeparator(.hidden)
24 }
25 }
26 .listStyle(.plain)
27 .overlay {
28 if viewModel.isLoadingCommits, viewModel.commits.isEmpty {
29 SRHTLoadingStateView(message: "Loading commits…")
30 } else if let error = viewModel.error, viewModel.commits.isEmpty {
31 SRHTErrorStateView(
32 title: "Couldn't Load Commits",
33 message: error,
34 retryAction: { await viewModel.loadCommits() }
35 )
36 } else if viewModel.commits.isEmpty {
37 ContentUnavailableView(
38 "No Commits",
39 systemImage: "clock.arrow.trianglehead.counterclockwise.rotate.90",
40 description: Text("This repository has no commit history.")
41 )
42 }
43 }
44 .task {
45 if viewModel.commits.isEmpty {
46 await viewModel.loadCommits()
47 }
48 }
49 .refreshable {
50 await viewModel.loadCommits()
51 }
52 .navigationDestination(for: CommitSummary.self) { commit in
53 CommitDetailView(
54 commitSummary: commit,
55 repository: viewModel.repository
56 )
57 }
58 }
59}