Colors, pages, post links
This commit is contained in:
@ -1,17 +1,50 @@
|
||||
import SwiftUI
|
||||
import HighlightedTextEditor
|
||||
|
||||
struct PageDetailView: View {
|
||||
|
||||
@ObservedObject var page: Page
|
||||
@ObservedObject
|
||||
var page: Page
|
||||
|
||||
@Binding
|
||||
var language: ContentLanguage
|
||||
@Environment(\.language)
|
||||
private var language
|
||||
|
||||
@EnvironmentObject
|
||||
private var content: Content
|
||||
|
||||
@State
|
||||
private var pageContent: String = ""
|
||||
|
||||
var body: some View {
|
||||
Text(page.metadata(for: language)?.title ?? "No headline")
|
||||
VStack(alignment: .leading) {
|
||||
TextField("", text: page.localized(in: language).editableTitle())
|
||||
.font(.title)
|
||||
|
||||
HStack(alignment: .firstTextBaseline) {
|
||||
Button(action: loadContent) {
|
||||
Text("Load")
|
||||
}
|
||||
Button(action: saveContent) {
|
||||
Text("Save")
|
||||
}
|
||||
Spacer()
|
||||
}
|
||||
HighlightedTextEditor(
|
||||
text: $pageContent,
|
||||
highlightRules: .markdown)
|
||||
}
|
||||
.padding()
|
||||
}
|
||||
|
||||
private func loadContent() {
|
||||
pageContent = content.storage.pageContent(for: page.id, language: language)
|
||||
}
|
||||
|
||||
private func saveContent() {
|
||||
content.storage.save(pageContent: pageContent, for: page.id, language: language)
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
PageDetailView(page: .empty, language: .constant(.english))
|
||||
PageDetailView(page: .empty)
|
||||
}
|
||||
|
38
CHDataManagement/Views/Pages/PageListView.swift
Normal file
38
CHDataManagement/Views/Pages/PageListView.swift
Normal file
@ -0,0 +1,38 @@
|
||||
import SwiftUI
|
||||
|
||||
struct PageListView: View {
|
||||
|
||||
@Environment(\.language)
|
||||
var language
|
||||
|
||||
@EnvironmentObject
|
||||
var content: Content
|
||||
|
||||
@State
|
||||
var selectedPage: Page?
|
||||
|
||||
var body: some View {
|
||||
NavigationSplitView {
|
||||
List(content.pages, selection: $selectedPage) { page in
|
||||
Text(page.localized(in: language).title)
|
||||
.tag(page)
|
||||
|
||||
}
|
||||
} detail: {
|
||||
// Detail view when an item is selected
|
||||
if let selectedPage {
|
||||
PageDetailView(page: selectedPage)
|
||||
} else {
|
||||
// Fallback if no item is selected
|
||||
Text("Select a page to show the content.")
|
||||
.font(.largeTitle)
|
||||
.foregroundColor(.secondary)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
PageListView()
|
||||
.environmentObject(Content())
|
||||
}
|
Reference in New Issue
Block a user