summaryrefslogtreecommitdiff
path: root/Hutch/Views
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-03-19 17:05:16 -0500
committerChristian Cleberg <[email protected]>2026-03-19 17:05:16 -0500
commit10d68934d4f45bf60e1736371ff790c50600198d (patch)
treec70ca00041a884274d7b857c10a7b83d452d21b0 /Hutch/Views
parentb82bbeeea48ad27832a355c2a41408559c411104 (diff)
downloadhutch-2.1.tar.gz
hutch-2.1.tar.bz2
hutch-2.1.zip
fix README height update and settings save alertsv2.1
Diffstat (limited to 'Hutch/Views')
-rw-r--r--Hutch/Views/Repositories/HgRepositorySettingsView.swift31
-rw-r--r--Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift4
-rw-r--r--Hutch/Views/Repositories/ReadmeView.swift6
-rw-r--r--Hutch/Views/Repositories/RepositorySettingsView.swift23
-rw-r--r--Hutch/Views/Repositories/RepositorySettingsViewModel.swift4
5 files changed, 62 insertions, 6 deletions
diff --git a/Hutch/Views/Repositories/HgRepositorySettingsView.swift b/Hutch/Views/Repositories/HgRepositorySettingsView.swift
index 3894b9d..5f45da8 100644
--- a/Hutch/Views/Repositories/HgRepositorySettingsView.swift
+++ b/Hutch/Views/Repositories/HgRepositorySettingsView.swift
@@ -9,6 +9,7 @@ struct HgRepositorySettingsView: View {
@State private var viewModel: HgRepositorySettingsViewModel?
@State private var showDeleteConfirmation = false
@State private var pendingACLDeletion: HgACLEntry?
+ @State private var saveResultAlert: SaveResultAlert?
var body: some View {
NavigationStack {
@@ -88,6 +89,13 @@ struct HgRepositorySettingsView: View {
Text("\(entry.entity.canonicalName) will lose \(entry.mode) access to this repository.")
}
}
+ .alert(item: $saveResultAlert) { alert in
+ Alert(
+ title: Text(alert.title),
+ message: Text(alert.message),
+ dismissButton: .default(Text("OK"))
+ )
+ }
}
@ViewBuilder
@@ -108,7 +116,13 @@ struct HgRepositorySettingsView: View {
}
Button {
- Task { await viewModel.saveInfo() }
+ Task {
+ let didSave = await viewModel.saveInfo()
+ saveResultAlert = SaveResultAlert(
+ title: didSave ? "Settings Updated" : "Couldn't Update Settings",
+ message: didSave ? "Repository settings were saved." : (viewModel.error ?? "Please try again.")
+ )
+ }
} label: {
if viewModel.isSavingInfo {
ProgressView()
@@ -188,7 +202,13 @@ struct HgRepositorySettingsView: View {
Toggle("Hide this repository from public listings", isOn: Bindable(viewModel).editedNonPublishing)
Button {
- Task { await viewModel.saveInfo() }
+ Task {
+ let didSave = await viewModel.saveInfo()
+ saveResultAlert = SaveResultAlert(
+ title: didSave ? "Settings Updated" : "Couldn't Update Settings",
+ message: didSave ? "Repository settings were saved." : (viewModel.error ?? "Please try again.")
+ )
+ }
} label: {
if viewModel.isSavingInfo {
ProgressView()
@@ -236,4 +256,11 @@ struct HgRepositorySettingsView: View {
.disabled(viewModel.isDeleting)
}
}
+
+ private struct SaveResultAlert: Identifiable {
+ let title: String
+ let message: String
+
+ var id: String { "\(title)-\(message)" }
+ }
}
diff --git a/Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift b/Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift
index 6cb6e36..a1a11ae 100644
--- a/Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift
+++ b/Hutch/Views/Repositories/HgRepositorySettingsViewModel.swift
@@ -168,7 +168,7 @@ final class HgRepositorySettingsViewModel {
}
}
- func saveInfo() async {
+ func saveInfo() async -> Bool {
isSavingInfo = true
defer { isSavingInfo = false }
error = nil
@@ -185,8 +185,10 @@ final class HgRepositorySettingsViewModel {
variables: ["id": repositoryId, "input": input],
responseType: HgUpdateRepositoryResponse.self
)
+ return true
} catch {
self.error = error.userFacingMessage
+ return false
}
}
diff --git a/Hutch/Views/Repositories/ReadmeView.swift b/Hutch/Views/Repositories/ReadmeView.swift
index 576adfc..3777cdb 100644
--- a/Hutch/Views/Repositories/ReadmeView.swift
+++ b/Hutch/Views/Repositories/ReadmeView.swift
@@ -1108,7 +1108,11 @@ private struct HTMLWebViewRepresentable: UIViewRepresentable {
if let cachedHeight = HTMLWebViewCoordinator.heightCache.object(forKey: wrapped as NSString)?.doubleValue {
let height = CGFloat(cachedHeight)
if abs(dynamicHeight - height) > 0.5 {
- dynamicHeight = height
+ DispatchQueue.main.async {
+ if abs(self.dynamicHeight - height) > 0.5 {
+ self.dynamicHeight = height
+ }
+ }
}
}
diff --git a/Hutch/Views/Repositories/RepositorySettingsView.swift b/Hutch/Views/Repositories/RepositorySettingsView.swift
index 5074138..5606ec6 100644
--- a/Hutch/Views/Repositories/RepositorySettingsView.swift
+++ b/Hutch/Views/Repositories/RepositorySettingsView.swift
@@ -11,6 +11,7 @@ struct RepositorySettingsView: View {
@State private var viewModel: RepositorySettingsViewModel?
@State private var showDeleteConfirmation = false
@State private var pendingACLDeletion: ACLEntry?
+ @State private var saveResultAlert: SaveResultAlert?
var body: some View {
NavigationStack {
@@ -91,6 +92,13 @@ struct RepositorySettingsView: View {
Text("\(entry.entity.canonicalName) will lose \(entry.mode) access to this repository.")
}
}
+ .alert(item: $saveResultAlert) { alert in
+ Alert(
+ title: Text(alert.title),
+ message: Text(alert.message),
+ dismissButton: .default(Text("OK"))
+ )
+ }
}
// MARK: - Info Section
@@ -122,7 +130,13 @@ struct RepositorySettingsView: View {
}
Button {
- Task { await viewModel.saveInfo() }
+ Task {
+ let didSave = await viewModel.saveInfo()
+ saveResultAlert = SaveResultAlert(
+ title: didSave ? "Settings Updated" : "Couldn't Update Settings",
+ message: didSave ? "Repository settings were saved." : (viewModel.error ?? "Please try again.")
+ )
+ }
} label: {
if viewModel.isSavingInfo {
ProgressView()
@@ -256,4 +270,11 @@ struct RepositorySettingsView: View {
.disabled(viewModel.isDeleting)
}
}
+
+ private struct SaveResultAlert: Identifiable {
+ let title: String
+ let message: String
+
+ var id: String { "\(title)-\(message)" }
+ }
}
diff --git a/Hutch/Views/Repositories/RepositorySettingsViewModel.swift b/Hutch/Views/Repositories/RepositorySettingsViewModel.swift
index ca8e501..2847cb7 100644
--- a/Hutch/Views/Repositories/RepositorySettingsViewModel.swift
+++ b/Hutch/Views/Repositories/RepositorySettingsViewModel.swift
@@ -153,7 +153,7 @@ final class RepositorySettingsViewModel {
}
"""
- func saveInfo() async {
+ func saveInfo() async -> Bool {
isSavingInfo = true
defer { isSavingInfo = false }
error = nil
@@ -172,8 +172,10 @@ final class RepositorySettingsViewModel {
variables: ["id": repositoryId, "input": input],
responseType: UpdateRepoInfoResponse.self
)
+ return true
} catch {
self.error = error.userFacingMessage
+ return false
}
}