Add button to delete page
This commit is contained in:
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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 }
|
||||||
}
|
}
|
||||||
|
@ -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 {
|
||||||
|
@ -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 {
|
||||||
|
Reference in New Issue
Block a user