Rework storage structs, link preview
This commit is contained in:
@ -31,6 +31,6 @@ struct LocalizedPostFeedSettingsView: View {
|
||||
}
|
||||
|
||||
#Preview {
|
||||
LocalizedPostFeedSettingsView(settings: .english)
|
||||
LocalizedPostFeedSettingsView(settings: PostSettings.default.english)
|
||||
.padding()
|
||||
}
|
||||
|
@ -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 {
|
||||
|
@ -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"))
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user