summaryrefslogtreecommitdiff
path: root/Hutch/Views/Tickets/TrackerManagementView.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Hutch/Views/Tickets/TrackerManagementView.swift')
-rw-r--r--Hutch/Views/Tickets/TrackerManagementView.swift37
1 files changed, 37 insertions, 0 deletions
diff --git a/Hutch/Views/Tickets/TrackerManagementView.swift b/Hutch/Views/Tickets/TrackerManagementView.swift
index cf923b6..4e04bbd 100644
--- a/Hutch/Views/Tickets/TrackerManagementView.swift
+++ b/Hutch/Views/Tickets/TrackerManagementView.swift
@@ -654,22 +654,27 @@ struct TrackerEditorSheet: View {
TextField("Tracker name", text: $name)
.textInputAutocapitalization(.never)
.autocorrectionDisabled()
+ .themedRow()
TextField("Short description (optional)", text: $description, axis: .vertical)
.lineLimit(2...4)
+ .themedRow()
Picker("Visibility", selection: $visibility) {
Text("Public").tag(Visibility.public)
Text("Unlisted").tag(Visibility.unlisted)
Text("Private").tag(Visibility.private)
}
+ .themedRow()
}
if let error, !error.isEmpty {
Section {
Text(error)
.foregroundStyle(.red)
+ .themedRow()
}
}
}
+ .themedList()
.navigationTitle(title)
.navigationBarTitleDisplayMode(.inline)
.toolbar {
@@ -718,10 +723,12 @@ struct TrackerACLManagementSheet: View {
List {
Section("Default Access") {
TrackerPermissionSummary(permissions: viewModel.defaultACL.permissions)
+ .themedRow()
Button("Update Default ACL") {
editingDefaultACL = true
}
.disabled(viewModel.isSavingACL)
+ .themedRow()
}
Section {
@@ -731,9 +738,11 @@ struct TrackerACLManagementSheet: View {
ProgressView()
Spacer()
}
+ .themedRow()
} else if viewModel.acls.isEmpty {
Text("No tracker-specific ACLs yet.")
.foregroundStyle(.secondary)
+ .themedRow()
} else {
ForEach(viewModel.acls) { entry in
VStack(alignment: .leading, spacing: 6) {
@@ -756,6 +765,7 @@ struct TrackerACLManagementSheet: View {
.tint(.blue)
}
}
+ .themedRow()
}
} header: {
Text("User ACLs")
@@ -763,6 +773,7 @@ struct TrackerACLManagementSheet: View {
Text("Each ACL must include all five permission flags.")
}
}
+ .themedList()
.navigationTitle("ACLs")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
@@ -908,6 +919,7 @@ private struct TrackerACLEditorSheet: View {
TextField("Username or ~username", text: $username)
.autocorrectionDisabled()
.textInputAutocapitalization(.never)
+ .themedRow()
}
permissionSection
@@ -916,9 +928,11 @@ private struct TrackerACLEditorSheet: View {
Section {
Text(error)
.foregroundStyle(.red)
+ .themedRow()
}
}
}
+ .themedList()
.navigationTitle(title)
.navigationBarTitleDisplayMode(.inline)
.toolbar {
@@ -950,10 +964,15 @@ private struct TrackerACLEditorSheet: View {
private var permissionSection: some View {
Section("Permissions") {
Toggle("Browse", isOn: $browse)
+ .themedRow()
Toggle("Submit", isOn: $submit)
+ .themedRow()
Toggle("Comment", isOn: $comment)
+ .themedRow()
Toggle("Edit", isOn: $edit)
+ .themedRow()
Toggle("Triage", isOn: $triage)
+ .themedRow()
}
}
@@ -1003,19 +1022,26 @@ private struct TrackerDefaultACLEditorSheet: View {
Form {
Section("Permissions") {
Toggle("Browse", isOn: $browse)
+ .themedRow()
Toggle("Submit", isOn: $submit)
+ .themedRow()
Toggle("Comment", isOn: $comment)
+ .themedRow()
Toggle("Edit", isOn: $edit)
+ .themedRow()
Toggle("Triage", isOn: $triage)
+ .themedRow()
}
if let error, !error.isEmpty {
Section {
Text(error)
.foregroundStyle(.red)
+ .themedRow()
}
}
}
+ .themedList()
.navigationTitle("Default ACL")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
@@ -1073,6 +1099,7 @@ struct TrackerLabelManagementSheet: View {
Text("Labels are managed here and reused throughout the tracker.")
.font(.footnote)
.foregroundStyle(.secondary)
+ .themedRow()
}
if viewModel.isLoadingLabels {
@@ -1081,12 +1108,14 @@ struct TrackerLabelManagementSheet: View {
ProgressView()
Spacer()
}
+ .themedRow()
} else if viewModel.labels.isEmpty {
ContentUnavailableView(
"No Labels",
systemImage: "tag",
description: Text("Create labels for triage and organization.")
)
+ .themedRow()
} else {
ForEach(viewModel.labels) { label in
Button {
@@ -1110,8 +1139,10 @@ struct TrackerLabelManagementSheet: View {
}
}
}
+ .themedRow()
}
}
+ .themedList()
.navigationTitle("Labels")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
@@ -1261,8 +1292,11 @@ private struct TrackerLabelEditorSheet: View {
Form {
Section("Details") {
TextField("Label name", text: $name)
+ .themedRow()
ColorPicker("Foreground", selection: $foregroundColor, supportsOpacity: false)
+ .themedRow()
ColorPicker("Background", selection: $backgroundColor, supportsOpacity: false)
+ .themedRow()
}
Section("Preview") {
@@ -1274,15 +1308,18 @@ private struct TrackerLabelEditorSheet: View {
foregroundColor: foregroundColor.hexString
)
)
+ .themedRow()
}
if let error, !error.isEmpty {
Section {
Text(error)
.foregroundStyle(.red)
+ .themedRow()
}
}
}
+ .themedList()
.navigationTitle(title)
.navigationBarTitleDisplayMode(.inline)
.toolbar {