summaryrefslogtreecommitdiff
path: root/Hutch/Views/Home/HomeView.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-12 19:58:20 -0500
committerChristian Cleberg <[email protected]>2026-04-12 19:58:20 -0500
commit9cd99c3e1c7e2620c34bfd9e78931e3b2b63aa8a (patch)
treebf7a249bec3b9aba18176e6139d690c9bf384ab5 /Hutch/Views/Home/HomeView.swift
parent1354f2464180ece6d13296a543a964ddf6d2d393 (diff)
downloadhutch-9cd99c3e1c7e2620c34bfd9e78931e3b2b63aa8a.tar.gz
hutch-9cd99c3e1c7e2620c34bfd9e78931e3b2b63aa8a.tar.bz2
hutch-9cd99c3e1c7e2620c34bfd9e78931e3b2b63aa8a.zip
feat: add projects list, detail view, and home pinning
Implements: https://todo.sr.ht/~ccleberg/hutch/26 Implements: https://todo.sr.ht/~ccleberg/hutch/27 Implements: https://todo.sr.ht/~ccleberg/hutch/28
Diffstat (limited to 'Hutch/Views/Home/HomeView.swift')
-rw-r--r--Hutch/Views/Home/HomeView.swift38
1 files changed, 6 insertions, 32 deletions
diff --git a/Hutch/Views/Home/HomeView.swift b/Hutch/Views/Home/HomeView.swift
index bbae296..da58587 100644
--- a/Hutch/Views/Home/HomeView.swift
+++ b/Hutch/Views/Home/HomeView.swift
@@ -69,11 +69,11 @@ struct HomeView: View {
.listStyle(.insetGrouped)
.overlay {
if viewModel.isLoadingProjects && viewModel.isLoadingAssignedTickets && viewModel.isLoadingRecentBuilds &&
- viewModel.projects.isEmpty && viewModel.assignedTickets.isEmpty && viewModel.recentBuilds.isEmpty &&
+ viewModel.pinnedProjects.isEmpty && viewModel.assignedTickets.isEmpty && viewModel.recentBuilds.isEmpty &&
viewModel.unreadInboxThreads.isEmpty {
SRHTLoadingStateView(message: "Loading Home…")
} else if !viewModel.isLoadingProjects && !viewModel.isLoadingAssignedTickets && !viewModel.isLoadingRecentBuilds &&
- viewModel.projects.isEmpty && viewModel.assignedTickets.isEmpty && viewModel.recentBuilds.isEmpty &&
+ viewModel.pinnedProjects.isEmpty && viewModel.assignedTickets.isEmpty && viewModel.recentBuilds.isEmpty &&
viewModel.unreadInboxThreads.isEmpty &&
viewModel.assignedTicketsError == nil && viewModel.recentBuildsError == nil {
ContentUnavailableView(
@@ -179,17 +179,17 @@ struct HomeView: View {
@ViewBuilder
private func projectsSection(_ viewModel: HomeViewModel) -> some View {
- if !viewModel.projects.isEmpty {
- HomeSectionView("Projects", isExpanded: $projectsExpanded) {
+ if !viewModel.pinnedProjects.isEmpty {
+ HomeSectionView("Pinned Projects", isExpanded: $projectsExpanded) {
NavigationLink {
- HomeProjectsListView(viewModel: viewModel)
+ ProjectsListView()
} label: {
Text("See All")
.font(.caption.weight(.medium))
}
.buttonStyle(.plain)
} content: {
- ForEach(viewModel.projects.prefix(projectPreviewLimit)) { project in
+ ForEach(viewModel.pinnedProjects.prefix(projectPreviewLimit)) { project in
NavigationLink {
ProjectDetailView(project: project)
} label: {
@@ -411,32 +411,6 @@ private struct HomeProjectRow: View {
}
}
-private struct HomeProjectsListView: View {
- let viewModel: HomeViewModel
-
- var body: some View {
- List {
- ForEach(viewModel.projects) { project in
- NavigationLink {
- ProjectDetailView(project: project)
- } label: {
- HomeProjectRow(project: project)
- }
- }
- }
- .navigationTitle("Projects")
- .navigationBarTitleDisplayMode(.inline)
- .refreshable {
- await viewModel.loadDashboard()
- }
- .overlay {
- if viewModel.isLoadingProjects && viewModel.projects.isEmpty {
- SRHTLoadingStateView(message: "Loading projects…")
- }
- }
- }
-}
-
private struct HomeBuildRow: View {
@Environment(AppState.self) private var appState
let build: HomeBuildItem