ChWebsiteApp/CHDataManagement/Server/WebsitePreviewSheet.swift
2025-02-15 01:02:25 +01:00

75 lines
2.1 KiB
Swift

import SwiftUI
struct WebsitePreviewSheet: View {
@EnvironmentObject
private var content: Content
@EnvironmentObject
private var server: WebServer
@Environment(\.dismiss)
private var dismiss
var body: some View {
VStack {
HStack {
Button(action: { server.loadHomeUrl() }) {
Image(systemSymbol: .house)
}
.disabled(server.isNotReady)
Button(action: { server.reloadPage() }) {
Image(systemSymbol: .arrowClockwise)
}
.disabled(server.isNotReady)
TextField("", text: $server.currentUrl)
.disabled(true)
.textFieldStyle(.roundedBorder)
Spacer()
Button("Close", action: dismissSheet)
}
.padding()
if server.isRunning {
WebView(viewModel: server)
} else if server.isStarting {
Spacer()
ProgressView()
Text("Loading preview...")
.font(.title)
.foregroundStyle(.secondary)
Spacer()
} else {
Spacer()
Text("Webserver disabled")
.font(.title)
.foregroundStyle(.secondary)
Text("Enable it to check out the generated content")
.foregroundStyle(.secondary)
Spacer()
}
}
.frame(minWidth: 500, idealWidth: 600, idealHeight: 600)
.onAppear(perform: startWebServer)
}
private func dismissSheet() {
if server.isRunning {
server.stopServer()
}
dismiss()
}
private func startWebServer() {
guard !server.isRunning else {
server.stopServer()
return
}
guard let folder = content.storage.outputScope?.url.path() else {
print("No output folder to start server")
return
}
server.startServer(in: folder)
}
}