krz/hutch
an ios client for sourcehut
clone: git clone https://gitbay.org/krz/hutch.git
236a22553d5cb9e07b3115c03864c882e0c41b77
verified · cmc
author: Christian Cleberg <hello@cleberg.net> · 2026-04-03T20:47:34Z
Hutch/Views/Repositories/FileTreeView.swift | 8 ++++++-- Hutch/Views/Repositories/HgRepositoryDetailView.swift | 4 +++- Hutch/Views/Tickets/TicketListView.swift | 8 +++++--- Hutch/Views/Tickets/TrackerListView.swift | 4 +++- Hutch/Views/Tickets/TrackerManagementView.swift | 8 ++++++-- 5 files changed, 23 insertions(+), 9 deletions(-) @@ -260,7 +260,9 @@ private struct FileTreeContentView: View { FileContentShareSheet(activityItems: [text]) } .alert("Share Unavailable", isPresented: $showShareUnavailableAlert) { - Button("OK", role: .cancel) {} + Button("OK", role: .cancel) { + // no-op: .cancel role handles alert dismissal + } } message: { Text(SRHTShareTarget.file.fallbackMessage) } @@ -403,7 +405,9 @@ struct FileContentShareSheet: UIViewControllerRepresentable { UIActivityViewController(activityItems: activityItems, applicationActivities: nil) } - func updateUIViewController(_ : UIActivityViewController, context _: Context) {} + func updateUIViewController(_ : UIActivityViewController, context _: Context) { + // no-op: UIActivityViewController manages its own state after presentation + } } final class CodeFileUIView: UIView { @@ -289,7 +289,9 @@ struct HgRepositoryDetailView: View { FileContentShareSheet(activityItems: [shareURL ?? fileContent]) } .alert("Share Unavailable", isPresented: $showShareUnavailableAlert) { - Button("OK", role: .cancel) {} + Button("OK", role: .cancel) { + // no-op: .cancel role handles alert dismissal + } } message: { Text(SRHTShareTarget.file.fallbackMessage) } @@ -25,8 +25,8 @@ struct TicketListView: View { init( tracker: TrackerSummary, - onTrackerUpdated: @escaping (TrackerSummary) -> Void = { _ in }, - onTrackerDeleted: @escaping (TrackerSummary) -> Void = { _ in } + onTrackerUpdated: @escaping (TrackerSummary) -> Void = { _ in /* no-op: default for callers that don't handle this event */ }, + onTrackerDeleted: @escaping (TrackerSummary) -> Void = { _ in /* no-op: default for callers that don't handle this event */ } ) { self._tracker = State(initialValue: tracker) self.onTrackerUpdated = onTrackerUpdated @@ -123,7 +123,9 @@ struct TicketListView: View { } } .alert("Delete Tracker?", isPresented: $showDeleteTrackerConfirmation) { - Button("Cancel", role: .cancel) {} + Button("Cancel", role: .cancel) { + // no-op: .cancel role handles alert dismissal + } Button("Delete", role: .destructive) { guard let trackerManagementViewModel else { return } Task { @@ -106,7 +106,9 @@ struct TrackerListView: View { } } )) { - Button("Cancel", role: .cancel) {} + Button("Cancel", role: .cancel) { + // no-op: .cancel role handles alert dismissal + } Button("Delete", role: .destructive) { guard let pendingDeletion, let viewModel else { return } Task { @@ -820,7 +820,9 @@ struct TrackerACLManagementSheet: View { } } )) { - Button("Cancel", role: .cancel) {} + Button("Cancel", role: .cancel) { + // no-op: .cancel role handles alert dismissal + } Button("Delete", role: .destructive) { guard let pendingDeletion else { return } Task { @@ -1157,7 +1159,9 @@ struct TrackerLabelManagementSheet: View { } } )) { - Button("Cancel", role: .cancel) {} + Button("Cancel", role: .cancel) { + // no-op: .cancel role handles alert dismissal + } Button("Delete", role: .destructive) { guard let pendingDeletion else { return } Task {