diff options
| author | Christian Cleberg <[email protected]> | 2026-04-13 19:44:44 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-04-13 19:44:44 -0500 |
| commit | fe1ccc69661603d419a642a450e4ac9e1258adb0 (patch) | |
| tree | 386455b6b5468abdd9dfa46dd4802b10da8b77a2 /Hutch/Views/Repositories | |
| parent | 6ec9754ce34f331641b000eddef3d44bca2631a5 (diff) | |
| download | hutch-3.1.3.tar.gz hutch-3.1.3.tar.bz2 hutch-3.1.3.zip | |
fix: centralize URLs, tighten models, and polish SwiftUI bindingsv3.1.3
- Add shared HutchDeepLinkURL constants for app, widgets, and tests.
- Bump marketing version to 3.1.2 and build to 70 (app + widget extension).
- Point Hutch stats default base URL at HutchStatsAPI; add SRHTWebURL status
incident feed and reuse it from SystemStatusService.
- Group Project into Metadata and Resources; split ContributionStatsResponse
into StatsWindow and StatsTotals with updated decoding and tests.
- Replace @Bindable usage with explicit Bindings in Profile, Projects list,
and repository ACL flows; simplify Home pinned-item helper; add no-op
bodies on cancel alert buttons where the compiler requires a statement.
- Move repository row build-status indicator next to the relative-updated
caption and reserve a fixed 8×8 slot so the row does not jump when status
loads.
- Use NSString.lastPathComponent for build artifact filenames; collapse
duplicate ACL error branches; minor HutchStats HTTP and XMLParserDelegate
cleanups.
- Point widgets at HutchDeepLinkURL helpers; align tests with the new
response and URL types.
Diffstat (limited to 'Hutch/Views/Repositories')
| -rw-r--r-- | Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift | 6 | ||||
| -rw-r--r-- | Hutch/Views/Repositories/RepositoryACLView.swift | 13 | ||||
| -rw-r--r-- | Hutch/Views/Repositories/RepositoryRowView.swift | 19 |
3 files changed, 23 insertions, 15 deletions
diff --git a/Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift b/Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift index 7b8d7f7..6df40db 100644 --- a/Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift +++ b/Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift @@ -261,11 +261,7 @@ final class HgRepositorySettingsViewModel { } newACLEntity = "" } catch { - if error.matchesGraphQLErrorClassification(.serviceNotProvisioned) { - self.error = error.userFacingMessage - } else { - self.error = error.userFacingMessage - } + self.error = error.userFacingMessage } } diff --git a/Hutch/Views/Repositories/RepositoryACLView.swift b/Hutch/Views/Repositories/RepositoryACLView.swift index 29ded84..ede770c 100644 --- a/Hutch/Views/Repositories/RepositoryACLView.swift +++ b/Hutch/Views/Repositories/RepositoryACLView.swift @@ -51,8 +51,6 @@ struct RepositoryACLView: View { @ViewBuilder private func content(_ viewModel: RepositoryACLViewModel) -> some View { - @Bindable var vm = viewModel - Group { if viewModel.isLoading && !viewModel.hasEntries && viewModel.loadError == nil { SRHTLoadingStateView(message: "Loading access…") @@ -98,7 +96,12 @@ struct RepositoryACLView: View { } } } - .srhtErrorBanner(error: $vm.error) + .srhtErrorBanner( + error: Binding( + get: { viewModel.error }, + set: { viewModel.error = $0 } + ) + ) .alert("Remove Access?", isPresented: Binding( get: { pendingDeletion != nil }, set: { isPresented in @@ -107,7 +110,9 @@ struct RepositoryACLView: View { } } )) { - Button("Cancel", role: .cancel) {} + Button("Cancel", role: .cancel) { + /* Dismiss only; removal is confirmed separately. */ + } Button("Remove Access", role: .destructive) { guard let entry = pendingDeletion else { return } Task { diff --git a/Hutch/Views/Repositories/RepositoryRowView.swift b/Hutch/Views/Repositories/RepositoryRowView.swift index afbd740..a2d120b 100644 --- a/Hutch/Views/Repositories/RepositoryRowView.swift +++ b/Hutch/Views/Repositories/RepositoryRowView.swift @@ -17,9 +17,6 @@ struct RepositoryRowView: View { RepositoryForgeBadge(service: repository.service) - if buildStatus != .none { - RepositoryBuildStatusIndicator(status: buildStatus) - } VisibilityBadge(visibility: repository.visibility) } @@ -44,9 +41,19 @@ struct RepositoryRowView: View { Spacer() - Text(repository.updated.relativeDescription) - .font(.caption) - .foregroundStyle(.tertiary) + HStack(spacing: 6) { + ZStack { + if buildStatus != .none { + RepositoryBuildStatusIndicator(status: buildStatus) + } + } + .frame(width: 8, height: 8) + .accessibilityHidden(buildStatus == .none) + + Text(repository.updated.relativeDescription) + .font(.caption) + .foregroundStyle(.tertiary) + } } } .padding(.vertical, 2) |
