ManaWebShell: Retry-Button in der Fehler-Leiste
Ein WebView-Lade-Fehler war bisher eine Sackgasse — Meldung sichtbar, aber kein Weg zum Neuladen. Jetzt: "Erneut laden"-Button erhöht einen internen reloadNudge, der in effectiveTarget.reloadToken einfließt → updateUIView/updateNSView lädt die URL neu. WebTargetTests sichern die Token-Ungleichheit ab (4/4 grün via swift test). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
ad9dc1abba
commit
3aa90762cc
3 changed files with 64 additions and 2 deletions
|
|
@ -24,8 +24,16 @@ public struct WebShellView: View {
|
|||
let config: WebShellConfig
|
||||
|
||||
@State private var navState = WebNavState()
|
||||
@State private var reloadNudge = 0
|
||||
@Environment(\.openURL) private var openURL
|
||||
|
||||
/// `target` plus interner Reload-Zähler. Der „Erneut laden"-Button in
|
||||
/// der Fehler-Leiste erhöht `reloadNudge` → neuer `reloadToken` →
|
||||
/// `updateUIView`/`updateNSView` lädt die URL neu.
|
||||
private var effectiveTarget: WebTarget {
|
||||
WebTarget(url: target.url, reloadToken: target.reloadToken + reloadNudge)
|
||||
}
|
||||
|
||||
public init(target: WebTarget, config: WebShellConfig) {
|
||||
self.target = target
|
||||
self.config = config
|
||||
|
|
@ -41,7 +49,7 @@ public struct WebShellView: View {
|
|||
}
|
||||
#if canImport(UIKit)
|
||||
WebViewRepresentable(
|
||||
target: target,
|
||||
target: effectiveTarget,
|
||||
navState: navState,
|
||||
openURL: openURL,
|
||||
config: config
|
||||
|
|
@ -50,7 +58,7 @@ public struct WebShellView: View {
|
|||
.background(config.backgroundColor)
|
||||
#elseif canImport(AppKit)
|
||||
MacWebViewRepresentable(
|
||||
target: target,
|
||||
target: effectiveTarget,
|
||||
navState: navState,
|
||||
openURL: openURL,
|
||||
config: config
|
||||
|
|
@ -74,6 +82,15 @@ public struct WebShellView: View {
|
|||
.lineLimit(2)
|
||||
.foregroundStyle(config.errorForegroundColor)
|
||||
Spacer()
|
||||
Button {
|
||||
navState.lastError = nil
|
||||
reloadNudge += 1
|
||||
} label: {
|
||||
Text("Erneut laden")
|
||||
.font(.caption.weight(.semibold))
|
||||
.foregroundStyle(config.errorForegroundColor)
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
}
|
||||
.padding(.horizontal, 12)
|
||||
.padding(.vertical, 8)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue