Add button to delete page
This commit is contained in:
@ -22,4 +22,11 @@ final class SelectedContent: ObservableObject {
|
||||
self.post = nil
|
||||
}
|
||||
}
|
||||
|
||||
func remove(_ page: Page) {
|
||||
if self.page == page {
|
||||
self.page = nil
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -135,6 +135,18 @@ final class Content: ObservableObject {
|
||||
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? {
|
||||
files.first { $0.absoluteUrl == withOutputPath }
|
||||
}
|
||||
|
@ -147,6 +147,29 @@ final class Storage: ObservableObject {
|
||||
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
|
||||
|
||||
private func postFileName(_ postId: String) -> String {
|
||||
|
@ -9,6 +9,9 @@ struct PageDetailView: View {
|
||||
@EnvironmentObject
|
||||
private var content: Content
|
||||
|
||||
@EnvironmentObject
|
||||
private var selection: SelectedContent
|
||||
|
||||
@ObservedObject
|
||||
private var page: Page
|
||||
|
||||
@ -73,10 +76,20 @@ struct PageDetailView: View {
|
||||
page: page.localized(in: language),
|
||||
transferImage: transferImage)
|
||||
.id(page.id + language.rawValue)
|
||||
DeleteButton(action: deletePage)
|
||||
}
|
||||
.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 {
|
||||
|
Reference in New Issue
Block a user