Rework storage structs, link preview

This commit is contained in:
Christoph Hagen
2025-01-08 14:59:04 +01:00
parent b99c064d10
commit a7197b9628
75 changed files with 1365 additions and 1454 deletions

View File

@ -31,6 +31,6 @@ struct LocalizedPostFeedSettingsView: View {
}
#Preview {
LocalizedPostFeedSettingsView(settings: .english)
LocalizedPostFeedSettingsView(settings: PostSettings.default.english)
.padding()
}

View File

@ -8,6 +8,12 @@ struct PathSettingsView: View {
@EnvironmentObject
private var content: Content
@State
private var showLoadErrorSheet: Bool = false
@State
private var loadErrors: [String] = []
var body: some View {
ScrollView {
VStack(alignment: .leading) {
@ -19,7 +25,7 @@ struct PathSettingsView: View {
title: "Content Folder",
folder: $content.storage.contentScope,
footer: "The folder where the raw content of the website is stored") { url in
content.update(contentPath: url)
content.update(contentPath: url, callback: showLoadErrors)
}
FolderOnDiskPropertyView(
@ -65,8 +71,32 @@ struct PathSettingsView: View {
footer: "The path in the output folder where assets are stored")
}
.padding()
.sheet(isPresented: $showLoadErrorSheet) {
VStack {
Text("Failed to load database")
.font(.headline)
List(loadErrors, id: \.self) { error in
HStack {
Text(error)
Spacer()
}
}
.frame(minHeight: 200)
Button("Dismiss", action: { showLoadErrorSheet = false })
.padding()
}
.padding()
}
}
}
private func showLoadErrors(errors: [String]) {
guard !errors.isEmpty else {
return
}
loadErrors = errors
showLoadErrorSheet = true
}
}
#Preview {

View File

@ -15,8 +15,8 @@ struct TagOverviewDetailView: View {
title: "Tag Overview",
text: "Configure the page showing all tags")
if let page = content.tagOverview?.localized(in: language) {
TagOverviewDetails(page: page)
if let tag = content.tagOverview?.localized(in: language) {
LocalizedTagDetailView(tag: tag)
.id(language)
} else {
Button("Create", action: createTagOverviewPage)
@ -27,50 +27,10 @@ struct TagOverviewDetailView: View {
}
private func createTagOverviewPage() {
content.tagOverview = TagOverviewPage(
content.tagOverview = Tag(
content: content,
german: .init(content: content, title: "Alle Tags", urlString: "alle"),
english: .init(content: content, title: "All tags", urlString: "all"))
}
}
private struct TagOverviewDetails: View {
@EnvironmentObject
private var content: Content
@ObservedObject
var page: LocalizedTagOverviewPage
var body: some View {
VStack(alignment: .leading) {
StringPropertyView(
title: "Title",
text: $page.title,
footer: "The title of the overview page")
IdPropertyView(
id: $page.urlComponent,
title: "Page URL String",
footer: "The url component to use for the link to the page",
validation: page.isValid,
update: { page.urlComponent = $0 })
OptionalStringPropertyView(
title: "Preview Title",
text: $page.linkPreviewTitle,
prompt: page.title,
footer: "The title to use for the page when linking to it")
OptionalImagePropertyView(
title: "Preview Image",
selectedImage: $page.linkPreviewImage,
footer: "The image to show for previews of this page")
OptionalTextFieldPropertyView(
title: "Preview Description",
text: $page.linkPreviewDescription,
footer: "The description to show in previews of the page")
}
id: "all-tags",
german: .init(content: content, urlComponent: "alle", name: "Alle Tags"),
english: .init(content: content, urlComponent: "all", name: "All tags"))
}
}