Add button to delete page

This commit is contained in:
Christoph Hagen
2025-05-04 11:48:31 +02:00
parent 329519e15b
commit cb041eb6ed
4 changed files with 55 additions and 0 deletions

View File

@ -22,4 +22,11 @@ final class SelectedContent: ObservableObject {
self.post = nil self.post = nil
} }
} }
func remove(_ page: Page) {
if self.page == page {
self.page = nil
}
}
} }

View File

@ -135,6 +135,18 @@ final class Content: ObservableObject {
posts.remove(post) posts.remove(post)
} }
func remove(_ page: Page) {
pages.remove(page)
for post in posts {
if post.linkedPage == page {
post.linkedPage = nil
}
}
// TODO: Check for page links and other references in content
}
// MARK: Loading
func file(withOutputPath: String) -> FileResource? { func file(withOutputPath: String) -> FileResource? {
files.first { $0.absoluteUrl == withOutputPath } files.first { $0.absoluteUrl == withOutputPath }
} }

View File

@ -147,6 +147,29 @@ final class Storage: ObservableObject {
return result return result
} }
/**
Completely delete a post file from the content folder
*/
func delete(page pageId: String) -> Bool {
guard let contentScope else {
return false
}
guard contentScope.deleteFile(at: pageMetadataPath(page: pageId)) else {
return false
}
// Move the existing content files
var result = true
for language in ContentLanguage.allCases {
// Copy as many files as possible, since metadata was already moved
// Don't fail early
if !contentScope.deleteFile(at: pageContentPath(page: pageId, language: language)) {
print("Failed to delete content file \(language) of page \(pageId)")
result = false
}
}
return result
}
// MARK: Posts // MARK: Posts
private func postFileName(_ postId: String) -> String { private func postFileName(_ postId: String) -> String {

View File

@ -9,6 +9,9 @@ struct PageDetailView: View {
@EnvironmentObject @EnvironmentObject
private var content: Content private var content: Content
@EnvironmentObject
private var selection: SelectedContent
@ObservedObject @ObservedObject
private var page: Page private var page: Page
@ -73,10 +76,20 @@ struct PageDetailView: View {
page: page.localized(in: language), page: page.localized(in: language),
transferImage: transferImage) transferImage: transferImage)
.id(page.id + language.rawValue) .id(page.id + language.rawValue)
DeleteButton(action: deletePage)
} }
.padding() .padding()
} }
} }
private func deletePage() {
guard content.storage.delete(page: page.id) else {
print("Page '\(page.id)': Failed to delete file in content folder")
return
}
content.remove(page)
selection.remove(page)
}
} }
extension PageDetailView: MainContentView { extension PageDetailView: MainContentView {