107 lines
3.8 KiB
Swift
107 lines
3.8 KiB
Swift
import SwiftUI
|
|
import SFSafeSymbols
|
|
|
|
struct GenerationContentView: View {
|
|
|
|
@Environment(\.language)
|
|
private var language
|
|
|
|
@EnvironmentObject
|
|
private var content: Content
|
|
|
|
@Environment(\.dismiss)
|
|
private var dismiss
|
|
|
|
var body: some View {
|
|
VStack(alignment: .leading) {
|
|
Text("Website Generation")
|
|
.font(.largeTitle)
|
|
.bold()
|
|
Text("Regenerate the website and monitor the output")
|
|
.foregroundStyle(.secondary)
|
|
.padding(.bottom, 30)
|
|
|
|
HStack {
|
|
Button {
|
|
if content.isGeneratingWebsite {
|
|
content.endCurrentGeneration()
|
|
} else {
|
|
content.generateWebsiteInAllLanguages()
|
|
}
|
|
} label: {
|
|
Text(content.isGeneratingWebsite ? "Cancel" : "Generate")
|
|
}
|
|
.disabled(content.isGeneratingWebsite != content.shouldGenerateWebsite)
|
|
if content.isGeneratingWebsite {
|
|
ProgressView()
|
|
.progressViewStyle(.circular)
|
|
.scaleEffect(0.6)
|
|
.frame(height: 16)
|
|
}
|
|
Spacer()
|
|
}
|
|
Text(content.generationStatus)
|
|
.padding(.vertical, 5)
|
|
GenerationResultsIssueView(
|
|
text: "\(content.results.imagesToGenerate.count) images",
|
|
status: .nominal,
|
|
items: { [] })
|
|
GenerationResultsIssueView(
|
|
text: "\(content.results.resultCount) items processed",
|
|
status: .nominal,
|
|
items: { [] })
|
|
GenerationStringIssuesView(
|
|
text: "external links",
|
|
statusWhenNonEmpty: .nominal,
|
|
items: $content.results.externalLinks)
|
|
GenerationStringIssuesView(
|
|
text: "required files",
|
|
statusWhenNonEmpty: .nominal,
|
|
items: $content.results.requiredFiles) { $0.id }
|
|
GenerationStringIssuesView(
|
|
text: "empty pages",
|
|
statusWhenNonEmpty: .warning,
|
|
items: $content.results.emptyPages) { "\($0.pageId) (\($0.language))" }
|
|
GenerationStringIssuesView(
|
|
text: "inaccessible files",
|
|
items: $content.results.inaccessibleFiles) { $0.id }
|
|
GenerationStringIssuesView(
|
|
text: "unparsable files",
|
|
items: $content.results.unparsableFiles) { $0.id }
|
|
GenerationStringIssuesView(
|
|
text: "unsaved output files",
|
|
items: $content.results.unsavedOutputFiles)
|
|
GenerationStringIssuesView(
|
|
text: "missing files",
|
|
items: $content.results.missingFiles)
|
|
GenerationStringIssuesView(
|
|
text: "missing tags",
|
|
items: $content.results.missingTags)
|
|
GenerationStringIssuesView(
|
|
text: "missing pages",
|
|
items: $content.results.missingPages)
|
|
GenerationStringIssuesView(
|
|
text: "invalid commands",
|
|
items: $content.results.invalidCommands)
|
|
GenerationStringIssuesView(
|
|
text: "invalid blocks",
|
|
items: $content.results.invalidBlocks)
|
|
GenerationStringIssuesView(
|
|
text: "warnings",
|
|
statusWhenNonEmpty: .warning,
|
|
items: $content.results.warnings)
|
|
HorizontalCenter {
|
|
Button(action: { dismiss() }) {
|
|
Text("Close")
|
|
}
|
|
}
|
|
}.padding()
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
GenerationContentView()
|
|
.environmentObject(Content.mock)
|
|
.padding()
|
|
}
|