From 5f6d545eb3455a9e4da5a3cb4460811e3a48d939 Mon Sep 17 00:00:00 2001 From: Christian Cleberg Date: Sun, 12 Apr 2026 00:34:54 -0500 Subject: improve home attention flows and cross-linking --- Hutch/Views/Tickets/TicketDetailView.swift | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'Hutch/Views/Tickets/TicketDetailView.swift') diff --git a/Hutch/Views/Tickets/TicketDetailView.swift b/Hutch/Views/Tickets/TicketDetailView.swift index 22ebaa9..4bea3ae 100644 --- a/Hutch/Views/Tickets/TicketDetailView.swift +++ b/Hutch/Views/Tickets/TicketDetailView.swift @@ -16,6 +16,7 @@ struct TicketDetailView: View { @State private var showResolveSheet = false @State private var showAssignSheet = false @State private var showLabelsSheet = false + @State private var isOpeningTracker = false // Comment composer mode @State private var commentMode: CommentMode = .write @@ -227,6 +228,26 @@ struct TicketDetailView: View { } .font(.caption) + Button { + openTracker() + } label: { + HStack(spacing: 6) { + Label("\(ownerUsername)/\(trackerName)", systemImage: "checklist") + .font(.caption.weight(.medium)) + if isOpeningTracker { + ProgressView() + .controlSize(.small) + } else { + Image(systemName: "arrow.up.right") + .font(.caption2) + .foregroundStyle(.tertiary) + } + } + .foregroundStyle(.secondary) + } + .buttonStyle(.plain) + .disabled(isOpeningTracker) + if !ticket.assignees.isEmpty { HStack(spacing: 4) { Image(systemName: "person.fill") @@ -346,6 +367,20 @@ struct TicketDetailView: View { let trimmed = value.trimmingCharacters(in: .whitespacesAndNewlines) return trimmed.hasPrefix("~") ? String(trimmed.dropFirst()) : trimmed } + + private func openTracker() { + guard !isOpeningTracker else { return } + isOpeningTracker = true + Task { + defer { isOpeningTracker = false } + do { + let tracker = try await appState.resolveTracker(owner: ownerUsername, name: trackerName) + appState.navigateToTracker(tracker) + } catch { + appState.presentTicketDeepLinkError() + } + } + } } // MARK: - Self-Sizing Markdown Web View -- cgit v1.2.3