Merge icon, delete-branch-after-merge setting, floating tab bar; bump to 2.0
Build iOS App / Build .ipa and publish source (push) Successful in 22s

- Merge button: use the proper SF Symbol 'arrow.triangle.merge' instead of
  the download icon 'arrow.down.circle'.
- Add a Settings toggle 'Delete branch after merge'. When on, the merge call
  passes delete_branch_after_merge=true and the head branch is deleted after
  a successful merge (best-effort).
- PR detail bottom tab bar: floating capsule style (regularMaterial + shadow)
  like the latest iOS tab bars, instead of a full-width bar.
- Bump to 2.0.
This commit is contained in:
Hermes committed 2026-08-12 22:37:42 +00:00
1 parent fce0385708
commit 53b3f69d0f
6 files changed
+49 -12

No files matched your search

+13 -4
View File
@@ -131,7 +131,9 @@ struct PRDetailView: View {
.background(Color(.secondarySystemBackground))
}
/// Bottom tab bar: icon-only navigation between the PR's sections.
/// Bottom tab bar: icon-only navigation between the PR's sections, in a
/// floating capsule style (like the latest iOS tab bars) rather than a
/// full-width bar.
private var bottomTabBar: some View {
HStack {
ForEach(DetailTab.allCases) { tab in
@@ -149,8 +151,15 @@ struct PRDetailView: View {
}
}
}
.padding(.vertical, 6)
.background(.bar)
.padding(.vertical, 8)
.padding(.horizontal, 6)
.background(
Capsule()
.fill(.regularMaterial)
.shadow(color: .black.opacity(0.15), radius: 8, y: 2)
)
.padding(.horizontal, 16)
.padding(.bottom, 8)
}
private var reviewMenu: some View {
@@ -173,7 +182,7 @@ struct PRDetailView: View {
Button {
showMergeSheet = true
} label: {
Image(systemName: "arrow.down.circle")
Image(systemName: "arrow.triangle.merge")
}
.disabled(vm.ciStatus == .failure &&
SettingsStore.shared.mergeGateMode == .block)
+9 -1
View File
@@ -130,8 +130,16 @@ final class PRDetailViewModel: ObservableObject {
busyMessage = "Merging…"
defer { busyMessage = nil }
do {
let deleteBranch = SettingsStore.shared.deleteBranchAfterMerge
try await client.merge(owner: owner, repo: repo.name,
number: prNumber, method: method)
number: prNumber, method: method,
deleteBranchAfterMerge: deleteBranch)
// If the setting is on, delete the head branch after a successful
// merge (best-effort; the branch may already be gone or protected).
if deleteBranch, let head = pr?.head?.ref {
try? await client.deleteBranch(owner: owner, repo: repo.name,
branch: head)
}
// Refresh the PR state to reflect the merge.
pr = try? await client.pullRequest(owner: owner, repo: repo.name,
number: prNumber)