Compare commits

...

2 Commits

Author SHA1 Message Date
Christoph Hagen
4f31622abe Fix label editing view 2025-05-02 23:15:01 +02:00
Christoph Hagen
d0685c163c Update page indicators 2025-05-02 23:14:47 +02:00
3 changed files with 29 additions and 10 deletions

View File

@ -61,6 +61,14 @@ final class LocalizedPage: ChangeObservingItem {
content.isValidIdForTagOrPageOrPost(urlComponent) &&
!content.containsPage(withUrlComponent: urlComponent)
}
func update(hasContent: Bool) -> Bool {
if self.hasContent != hasContent {
self.hasContent = hasContent
return true
}
return false
}
}

View File

@ -153,7 +153,9 @@ final class Page: Item, DateItem, LocalizedItem {
guard content.storage.remove(pageContent: id, in: language) else {
return false
}
localized(in: language).hasContent = false
if localized(in: language).update(hasContent: false) {
self.didChange()
}
return true
}
@ -161,7 +163,9 @@ final class Page: Item, DateItem, LocalizedItem {
guard content.storage.save(pageContent: pageContent, for: id, in: language) else {
return false
}
localized(in: language).hasContent = true
if localized(in: language).update(hasContent: true) {
self.didChange()
}
return true
}
@ -169,8 +173,15 @@ final class Page: Item, DateItem, LocalizedItem {
Update the `hasContent` property of all localized pages.
*/
func updateContentExistence() {
var didUpdate = false
for language in ContentLanguage.allCases {
localized(in: language).hasContent = content.storage.hasPageContent(for: id, language: language)
let hasContent = content.storage.hasPageContent(for: id, language: language)
if localized(in: language).update(hasContent: hasContent) {
didUpdate = true
}
}
if didUpdate {
self.didChange()
}
}

View File

@ -10,7 +10,7 @@ struct LabelCreationView: View {
var body: some View {
List {
ForEach($labels) { label in
ForEach($labels, id: \.icon) { label in
HStack {
Button(action: { remove(label.wrappedValue) }) {
Image(systemSymbol: .minusCircleFill)
@ -32,13 +32,13 @@ struct LabelCreationView: View {
}
private func addLabel() {
var label = ContentLabel(icon: .statisticsTime, value: "Value")
var number = 0
while labels.contains(label) {
number += 1
label.value = "Value \(number)"
for icon in PageIcon.allCases {
if labels.contains(where: { $0.icon == icon }) {
continue
}
labels.append(.init(icon: icon, value: "Value"))
return
}
labels.append(label)
}
private func remove(_ label: ContentLabel) {