Reload inbox after merge + pull-to-refresh on PR content; bump to 3.4
Build iOS App / Build .ipa and publish source (push) Successful in 34s
Build iOS App / Build .ipa and publish source (push) Successful in 34s
- After a merge, the app returns to the landing page but the inbox kept stale PRs. Add an inboxNeedsRefresh flag set on merge success; InboxView reloads on next appearance when it's set. - The PR content (incl. the Checks/workflow tab) is now pull-to-refreshable via .refreshable on the content ScrollView, so workflow status can be updated by pulling down. Bump to 3.4.
This commit is contained in:
1 parent
a9d408ee85
commit
a045a36125
4 files changed
+19
-6
No files matched your search
@@ -187,7 +187,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 24;
|
CURRENT_PROJECT_VERSION = 25;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "GiteaPR";
|
INFOPLIST_KEY_CFBundleDisplayName = "GiteaPR";
|
||||||
@@ -197,7 +197,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 3.3;
|
MARKETING_VERSION = 3.4;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.bueso.giteapr;
|
PRODUCT_BUNDLE_IDENTIFIER = com.bueso.giteapr;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
@@ -211,7 +211,7 @@
|
|||||||
buildSettings = {
|
buildSettings = {
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 24;
|
CURRENT_PROJECT_VERSION = 25;
|
||||||
DEVELOPMENT_TEAM = "";
|
DEVELOPMENT_TEAM = "";
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = "GiteaPR";
|
INFOPLIST_KEY_CFBundleDisplayName = "GiteaPR";
|
||||||
@@ -221,7 +221,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 3.3;
|
MARKETING_VERSION = 3.4;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.bueso.giteapr;
|
PRODUCT_BUNDLE_IDENTIFIER = com.bueso.giteapr;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
|||||||
@@ -70,8 +70,9 @@ struct PRDetailView: View {
|
|||||||
}
|
}
|
||||||
.sheet(isPresented: $showMergeSheet) {
|
.sheet(isPresented: $showMergeSheet) {
|
||||||
MergeSheet(vm: vm) {
|
MergeSheet(vm: vm) {
|
||||||
// Merge succeeded: show the success animation, then pop back
|
// Merge succeeded: mark the inbox for refresh, show the success
|
||||||
// to the landing page.
|
// animation, then pop back to the landing page.
|
||||||
|
SettingsStore.shared.inboxNeedsRefresh = true
|
||||||
withAnimation(.spring(response: 0.4, dampingFraction: 0.6)) {
|
withAnimation(.spring(response: 0.4, dampingFraction: 0.6)) {
|
||||||
showMergeSuccess = true
|
showMergeSuccess = true
|
||||||
}
|
}
|
||||||
@@ -114,6 +115,7 @@ struct PRDetailView: View {
|
|||||||
case .none: OverviewTab(pr: pr)
|
case .none: OverviewTab(pr: pr)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.refreshable { await vm.load() }
|
||||||
|
|
||||||
bottomTabBar
|
bottomTabBar
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,6 +33,9 @@ final class SettingsStore: ObservableObject {
|
|||||||
didSet { UserDefaults.standard.set(monitoredRepos,
|
didSet { UserDefaults.standard.set(monitoredRepos,
|
||||||
forKey: "monitoredRepos") }
|
forKey: "monitoredRepos") }
|
||||||
}
|
}
|
||||||
|
/// Set when a PR is merged, so the inbox knows to reload on next appearance
|
||||||
|
/// (otherwise a just-merged PR could linger as stale in the list).
|
||||||
|
@Published var inboxNeedsRefresh = false
|
||||||
|
|
||||||
private init() {
|
private init() {
|
||||||
instanceURL = KeychainHelper.get("instanceURL") ?? "https://gitea.bueso.eu"
|
instanceURL = KeychainHelper.get("instanceURL") ?? "https://gitea.bueso.eu"
|
||||||
|
|||||||
@@ -60,6 +60,14 @@ struct InboxView: View {
|
|||||||
didInitialLoad = true
|
didInitialLoad = true
|
||||||
await vm.load()
|
await vm.load()
|
||||||
}
|
}
|
||||||
|
.onAppear {
|
||||||
|
// After a merge, the inbox must reload so the just-merged PR
|
||||||
|
// doesn't linger as stale in the list.
|
||||||
|
if SettingsStore.shared.inboxNeedsRefresh {
|
||||||
|
SettingsStore.shared.inboxNeedsRefresh = false
|
||||||
|
Task { await vm.load() }
|
||||||
|
}
|
||||||
|
}
|
||||||
.alert("Error", isPresented: .init(
|
.alert("Error", isPresented: .init(
|
||||||
get: { vm.errorMessage != nil },
|
get: { vm.errorMessage != nil },
|
||||||
set: { if !$0 { vm.errorMessage = nil } })) {
|
set: { if !$0 { vm.errorMessage = nil } })) {
|
||||||
|
|||||||
Reference in new issue
Block a user