Close Page view popup tabs when pages request it
This commit is contained in:
@@ -93,7 +93,11 @@ extension Store {
|
||||
if shown.pages.isEmpty {
|
||||
shownPages[page.root] = nil
|
||||
pages.closeSites(page.root)
|
||||
if sheet?.tab == .page {
|
||||
let owner: Sheet.Owner = switch page.root {
|
||||
case .task(let id): .task(id)
|
||||
case .project(let id): .project(id)
|
||||
}
|
||||
if sheet?.tab == .page, sheet?.owner == owner {
|
||||
sheet = nil
|
||||
}
|
||||
return
|
||||
@@ -163,6 +167,7 @@ final class Pages {
|
||||
private(set) var titles: [Page: String] = [:]
|
||||
@ObservationIgnored var served: [PageSite: [String: Data]] = [:]
|
||||
@ObservationIgnored var popup: ((Page) -> Void)?
|
||||
@ObservationIgnored var closePage: ((Page) -> Void)?
|
||||
@ObservationIgnored private var listener: PageListener?
|
||||
@ObservationIgnored private var hosts: [PageSite: String] = [:]
|
||||
@ObservationIgnored private var sites: [String: PageSite] = [:]
|
||||
@@ -177,6 +182,12 @@ final class Pages {
|
||||
delegate.popup = { [weak self] opener, config in
|
||||
self?.adopt(opener, config)
|
||||
}
|
||||
delegate.close = { [weak self] view in
|
||||
guard let self, let page = self.views.first(where: { $0.value === view })?.key else {
|
||||
return
|
||||
}
|
||||
self.closePage?(page)
|
||||
}
|
||||
listener = PageListener(api: api, ready: { [weak self] port in
|
||||
Task { @MainActor in
|
||||
self?.port = port
|
||||
@@ -638,6 +649,11 @@ private struct PageTabButton: View {
|
||||
@MainActor
|
||||
private final class PageDelegate: NSObject, WKUIDelegate, WKNavigationDelegate {
|
||||
var popup: ((WKWebView, WKWebViewConfiguration) -> WKWebView?)?
|
||||
var close: ((WKWebView) -> Void)?
|
||||
|
||||
func webViewDidClose(_ webView: WKWebView) {
|
||||
close?(webView)
|
||||
}
|
||||
private var waits: [ObjectIdentifier: CheckedContinuation<Void, any Error>] = [:]
|
||||
|
||||
func wait(_ navigation: WKNavigation?) async throws {
|
||||
|
||||
@@ -136,6 +136,9 @@ final class Store {
|
||||
pages.popup = { [weak self] page in
|
||||
self?.openPage(page)
|
||||
}
|
||||
pages.closePage = { [weak self] page in
|
||||
self?.closePage(page)
|
||||
}
|
||||
}
|
||||
|
||||
func sends(_ key: String) -> LocalSends {
|
||||
|
||||
Reference in New Issue
Block a user