Generate first tag pages
This commit is contained in:
@ -67,6 +67,7 @@ struct AddPageView: View {
|
||||
|
||||
private func addNewPage() {
|
||||
let page = Page(
|
||||
content: content,
|
||||
id: newPageId,
|
||||
isDraft: true,
|
||||
createdDate: .now,
|
||||
|
@ -20,6 +20,9 @@ struct LocalizedPageContentView: View {
|
||||
@State
|
||||
private var pageContent: String = ""
|
||||
|
||||
@State
|
||||
private var didLoadContent = false
|
||||
|
||||
init(pageId: String, page: LocalizedPage) {
|
||||
self.pageId = pageId
|
||||
self.page = page
|
||||
@ -50,18 +53,32 @@ struct LocalizedPageContentView: View {
|
||||
}
|
||||
|
||||
private func loadContent() {
|
||||
let content = content.storage.pageContent(for: pageId, language: language)
|
||||
guard content != "" else {
|
||||
pageContent = "New file"
|
||||
return
|
||||
do {
|
||||
let content = try content.storage.pageContent(for: pageId, language: language)
|
||||
|
||||
guard content != "" else {
|
||||
pageContent = "New file"
|
||||
didLoadContent = false
|
||||
return
|
||||
}
|
||||
pageContent = content
|
||||
didLoadContent = true
|
||||
|
||||
} catch {
|
||||
print("Failed to load page content: \(error)")
|
||||
pageContent = "Failed to load"
|
||||
}
|
||||
pageContent = content
|
||||
|
||||
}
|
||||
|
||||
private func saveContent() {
|
||||
guard pageContent != "", pageContent != "New file" else {
|
||||
guard didLoadContent else {
|
||||
return
|
||||
}
|
||||
content.storage.save(pageContent: pageContent, for: pageId, language: language)
|
||||
do {
|
||||
try content.storage.save(pageContent: pageContent, for: pageId, language: language)
|
||||
} catch {
|
||||
print("Failed to save content: \(error)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -14,8 +14,22 @@ struct PageDetailView: View {
|
||||
@State
|
||||
private var isGeneratingWebsite = false
|
||||
|
||||
@State
|
||||
private var newId: String
|
||||
|
||||
init(page: Page) {
|
||||
self.page = page
|
||||
self.newId = page.id
|
||||
}
|
||||
|
||||
private let allowedCharactersInPostId = CharacterSet.alphanumerics.union(CharacterSet(charactersIn: "-")).inverted
|
||||
|
||||
private var idExists: Bool {
|
||||
page.content.pages.contains { $0.id == newId }
|
||||
}
|
||||
|
||||
private var containsInvalidCharacters: Bool {
|
||||
newId.rangeOfCharacter(from: allowedCharactersInPostId) != nil
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
@ -25,11 +39,13 @@ struct PageDetailView: View {
|
||||
Text("Generate")
|
||||
}
|
||||
.disabled(isGeneratingWebsite)
|
||||
Text("ID")
|
||||
.font(.headline)
|
||||
TextField("", text: $page.id)
|
||||
.textFieldStyle(.roundedBorder)
|
||||
.padding(.bottom)
|
||||
HStack {
|
||||
TextField("", text: $newId)
|
||||
.textFieldStyle(.roundedBorder)
|
||||
Button("Update", action: setNewId)
|
||||
.disabled(newId.isEmpty || containsInvalidCharacters || idExists)
|
||||
}
|
||||
.padding(.bottom)
|
||||
|
||||
HStack {
|
||||
Text("Draft")
|
||||
@ -102,12 +118,20 @@ struct PageDetailView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func setNewId() {
|
||||
guard page.update(id: newId) else {
|
||||
newId = page.id
|
||||
return
|
||||
}
|
||||
page.id = newId
|
||||
}
|
||||
}
|
||||
|
||||
extension PageDetailView: MainContentView {
|
||||
|
||||
init(item: Page) {
|
||||
self.page = item
|
||||
self.init(page: item)
|
||||
}
|
||||
|
||||
static let itemDescription = "a page"
|
||||
|
Reference in New Issue
Block a user