Is it possible to call openWindow() in a navigationDestination in a NavigationStack?

I have a program that uses 3 different windows, each in their own window group. In a button I can use openWindow() to call another window and it works perfectly. I watched the video at the link below and now am trying to convert my program to use a navigation stack instead of buttons. I got things to work using the code listed at the link with a few changes but am unable to get the navigation destination to use openWindow. I attempted to create a view builder but could not get it to work. After some additional research I am starting to think that the navigation destination expects to use the same window as the root view not a separate window/view and therefore, navigation destination wants just a view. But I am unsure. If someone could provide some guidance it would be appreciated.

https://developer.apple.com/videos/play/wwdc2022/10054/

struct ContentView: View {
    @Environment (\.openWindow) private var openWindow
    @StateObject private var dataModel = DataModel()
    var body: some View {
        VStack(alignment: .center) {
            NavigationStack() {
                List(Sections.allCases) { section in
                    Section(section.localizedName) {
                        ForEach(dataModel.stocks(in: section)) { stock in
                            NavigationLink(stock.listingName, value: stock)
                                .font(Font.custom("Arial", size: 16))
                        }
                    } // end section
                } // end list
                .scrollContentBackground(.hidden)
                .background(Color.mint)
                .navigationTitle("Stocks")
                .navigationDestination(for: StockData.self) { stock in
                    Text("\(stock.listingName) - \(stock.name)")
//                    GenericTableView(content: openWindow(id: "table", value: stock.name))
                    // Cannot convert value of type '()' to expected argument type '() -> ContentView'
                }
            } // end navigation stack
        } // end v stack
    }
}

struct GenericTableView<Content:View>: View {
    let content: Content
    init(@ViewBuilder content: () -> Content) {
        self.content = content()
    }
    var body: some View {
            content
    }
}

Accepted Reply

After doing more research it appears that this is not possible. So I converted the navigation stack to a series of buttons. It works. Below is an example button and my App struct.

Button {
    openWindow(id: "summary")
} label: {
    Text("Summary")
        .font(Font.custom("Arial", size: 14.0))
        .foregroundColor(Color.blue)
        .background(Color.clear)
        .padding(.leading, 35)
}
.focusable(false)
.buttonStyle(.link)

@main
struct WindowGroupsApp: App {
    var body: some Scene {
        WindowGroup ("Home") {
            ContentView()
                .hostingWindowPosition(window: "Home")
        }
        Window("Summary", id: "summary") {
            SummaryView()
                .hostingWindowPosition(window: "Summary")
        }
        WindowGroup ("Table", id: "table", for: String.self) { $fundName in
            NavigationDestinationView(fundName: fundName!, numYears: 1)
                .hostingWindowPosition(window: "Table")
        }
        WindowGroup ("Chart", id: "chart1", for: String.self) { $fundName in
            CustomChartView(fundName: fundName!, numYears: 1)
                .hostingWindowPosition(window: "Chart")
        }
        WindowGroup ("Chart", id: "chart5", for: String.self) { $fundName in
            CustomChartView(fundName: fundName!, numYears: 5)
                .hostingWindowPosition(window: "Chart")
        }
    }
}

Replies

After doing more research it appears that this is not possible. So I converted the navigation stack to a series of buttons. It works. Below is an example button and my App struct.

Button {
    openWindow(id: "summary")
} label: {
    Text("Summary")
        .font(Font.custom("Arial", size: 14.0))
        .foregroundColor(Color.blue)
        .background(Color.clear)
        .padding(.leading, 35)
}
.focusable(false)
.buttonStyle(.link)

@main
struct WindowGroupsApp: App {
    var body: some Scene {
        WindowGroup ("Home") {
            ContentView()
                .hostingWindowPosition(window: "Home")
        }
        Window("Summary", id: "summary") {
            SummaryView()
                .hostingWindowPosition(window: "Summary")
        }
        WindowGroup ("Table", id: "table", for: String.self) { $fundName in
            NavigationDestinationView(fundName: fundName!, numYears: 1)
                .hostingWindowPosition(window: "Table")
        }
        WindowGroup ("Chart", id: "chart1", for: String.self) { $fundName in
            CustomChartView(fundName: fundName!, numYears: 1)
                .hostingWindowPosition(window: "Chart")
        }
        WindowGroup ("Chart", id: "chart5", for: String.self) { $fundName in
            CustomChartView(fundName: fundName!, numYears: 5)
                .hostingWindowPosition(window: "Chart")
        }
    }
}