import SwiftUI struct GenerationContentView: View { @Environment(\.language) private var language @EnvironmentObject private var content: Content @Binding private var selectedSection: SettingsSection init(selected: Binding) { self._selectedSection = selected } var body: some View { switch selectedSection { case .folders, .navigationBar, .postFeed, .tagOverview: generationView case .pages: PageSettingsContentView() } } @ViewBuilder private var generationView: 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) .frame(height: 25) } Spacer() } Text(content.generationStatus) .padding(.vertical, 5) HStack(spacing: 8) { Text("\(content.results.imagesToGenerate.count) images") Text("\(content.results.externalLinks.count) external links") Text("\(content.results.resultCount) items processed") Text("\(content.results.requiredFiles.count) files") } List { Section("Empty pages") { ForEach(content.results.emptyPages.sorted()) { id in Text("\(id.pageId) (\(id.language))") } } Section("Inaccessible files") { ForEach(content.results.inaccessibleFiles.sorted()) { file in Text(file.id) } } Section("Unparsable files") { ForEach(content.results.unparsableFiles.sorted()) { file in Text(file.id) } } Section("Missing files") { ForEach(content.results.missingFiles.sorted(), id: \.self) { file in Text(file) } } Section("Missing tags") { ForEach(content.results.missingTags.sorted(), id: \.self) { tag in Text(tag) } } Section("Missing pages") { ForEach(content.results.missingPages.sorted(), id: \.self) { page in Text(page) } } Section("Invalid commands") { ForEach(content.results.invalidCommands.sorted(), id: \.self) { markdown in Text(markdown) } } Section("Warnings") { ForEach(content.results.warnings.sorted(), id: \.self) { warning in Text(warning) } } Section("Unsaved output files") { ForEach(content.results.unsavedOutputFiles.sorted(), id: \.self) { file in Text(file) } } } }.padding() } } #Preview { GenerationContentView(selected: .constant(.folders)) .environmentObject(Content.mock) .padding() }