summaryrefslogtreecommitdiff
path: root/HutchWidgetExtension/NeedsAttentionWidget.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-13 19:44:44 -0500
committerChristian Cleberg <[email protected]>2026-04-13 19:44:44 -0500
commitfe1ccc69661603d419a642a450e4ac9e1258adb0 (patch)
tree386455b6b5468abdd9dfa46dd4802b10da8b77a2 /HutchWidgetExtension/NeedsAttentionWidget.swift
parent6ec9754ce34f331641b000eddef3d44bca2631a5 (diff)
downloadhutch-fe1ccc69661603d419a642a450e4ac9e1258adb0.tar.gz
hutch-fe1ccc69661603d419a642a450e4ac9e1258adb0.tar.bz2
hutch-fe1ccc69661603d419a642a450e4ac9e1258adb0.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 'HutchWidgetExtension/NeedsAttentionWidget.swift')
-rw-r--r--HutchWidgetExtension/NeedsAttentionWidget.swift14
1 files changed, 7 insertions, 7 deletions
diff --git a/HutchWidgetExtension/NeedsAttentionWidget.swift b/HutchWidgetExtension/NeedsAttentionWidget.swift
index 574e9eb..016f1c9 100644
--- a/HutchWidgetExtension/NeedsAttentionWidget.swift
+++ b/HutchWidgetExtension/NeedsAttentionWidget.swift
@@ -71,7 +71,7 @@ private struct NeedsAttentionWidgetView: View {
fallbackState
}
}
- .widgetURL(family == .systemSmall ? URL(string: "hutch://home") : nil)
+ .widgetURL(family == .systemSmall ? HutchDeepLinkURL.home : nil)
.containerBackground(for: .widget) {
Color(.systemBackground)
}
@@ -101,7 +101,7 @@ private struct NeedsAttentionWidgetView: View {
private func mediumView(snapshot: NeedsAttentionSnapshot) -> some View {
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .top, spacing: 12) {
- Link(destination: URL(string: "hutch://home")!) {
+ Link(destination: HutchDeepLinkURL.home) {
metricColumn(
count: snapshot.unreadInboxThreads,
label: "Unread",
@@ -109,14 +109,14 @@ private struct NeedsAttentionWidgetView: View {
tint: unreadTint(for: snapshot.unreadInboxThreads)
)
}
- Link(destination: URL(string: "hutch://trackers")!) {
+ Link(destination: HutchDeepLinkURL.trackers) {
metricColumn(
count: snapshot.assignedOpenTickets,
label: "Assigned",
systemImage: "ticket"
)
}
- Link(destination: URL(string: "hutch://builds")!) {
+ Link(destination: HutchDeepLinkURL.builds) {
metricColumn(
count: snapshot.failedBuilds,
label: "Failed",
@@ -134,7 +134,7 @@ private struct NeedsAttentionWidgetView: View {
private func largeView(snapshot: NeedsAttentionSnapshot) -> some View {
VStack(alignment: .leading, spacing: 18) {
- Link(destination: URL(string: "hutch://home")!) {
+ Link(destination: HutchDeepLinkURL.home) {
metricRow(
count: snapshot.unreadInboxThreads,
label: "Unread threads",
@@ -142,14 +142,14 @@ private struct NeedsAttentionWidgetView: View {
tint: unreadTint(for: snapshot.unreadInboxThreads)
)
}
- Link(destination: URL(string: "hutch://trackers")!) {
+ Link(destination: HutchDeepLinkURL.trackers) {
metricRow(
count: snapshot.assignedOpenTickets,
label: "Assigned tickets",
systemImage: "ticket"
)
}
- Link(destination: URL(string: "hutch://builds")!) {
+ Link(destination: HutchDeepLinkURL.builds) {
metricRow(
count: snapshot.failedBuilds,
label: "Failed builds",