summaryrefslogtreecommitdiff
path: root/Hutch/Views/Tickets
diff options
context:
space:
mode:
Diffstat (limited to 'Hutch/Views/Tickets')
-rw-r--r--Hutch/Views/Tickets/TicketDetailView.swift16
-rw-r--r--Hutch/Views/Tickets/TicketListView.swift9
2 files changed, 22 insertions, 3 deletions
diff --git a/Hutch/Views/Tickets/TicketDetailView.swift b/Hutch/Views/Tickets/TicketDetailView.swift
index 6ed5df0..22ebaa9 100644
--- a/Hutch/Views/Tickets/TicketDetailView.swift
+++ b/Hutch/Views/Tickets/TicketDetailView.swift
@@ -20,6 +20,11 @@ struct TicketDetailView: View {
// Comment composer mode
@State private var commentMode: CommentMode = .write
+ private var isOwnedByCurrentUser: Bool {
+ guard let currentUser = appState.currentUser else { return false }
+ return normalizedUsername(currentUser.username) == normalizedUsername(ownerUsername)
+ }
+
private enum CommentMode: String, CaseIterable {
case write = "Write"
case preview = "Preview"
@@ -41,7 +46,7 @@ struct TicketDetailView: View {
Image(systemName: "square.and.arrow.up")
}
- if let viewModel, viewModel.ticket != nil {
+ if let viewModel, viewModel.ticket != nil, isOwnedByCurrentUser {
actionsMenu(viewModel)
}
}
@@ -195,7 +200,9 @@ struct TicketDetailView: View {
Spacer(minLength: 12)
- assignToMeButton(ticket: ticket, viewModel: viewModel)
+ if isOwnedByCurrentUser {
+ assignToMeButton(ticket: ticket, viewModel: viewModel)
+ }
}
HStack(spacing: 8) {
@@ -334,6 +341,11 @@ struct TicketDetailView: View {
}
.padding()
}
+
+ private func normalizedUsername(_ value: String) -> String {
+ let trimmed = value.trimmingCharacters(in: .whitespacesAndNewlines)
+ return trimmed.hasPrefix("~") ? String(trimmed.dropFirst()) : trimmed
+ }
}
// MARK: - Self-Sizing Markdown Web View
diff --git a/Hutch/Views/Tickets/TicketListView.swift b/Hutch/Views/Tickets/TicketListView.swift
index baed21c..a1cea6f 100644
--- a/Hutch/Views/Tickets/TicketListView.swift
+++ b/Hutch/Views/Tickets/TicketListView.swift
@@ -18,6 +18,11 @@ struct TicketListView: View {
@State private var showTrackerLabels = false
@State private var showDeleteTrackerConfirmation = false
+ private var isOwnedByCurrentUser: Bool {
+ guard let currentUser = appState.currentUser else { return false }
+ return normalizedUsername(currentUser.username) == normalizedUsername(tracker.owner.canonicalName)
+ }
+
init(
tracker: TrackerSummary,
onTrackerUpdated: @escaping (TrackerSummary) -> Void = { _ in },
@@ -58,7 +63,9 @@ struct TicketListView: View {
}
.accessibilityLabel("Create ticket")
- trackerActionsMenu
+ if isOwnedByCurrentUser {
+ trackerActionsMenu
+ }
}
}
}