Show page tags

This commit is contained in:
Christoph Hagen 2025-01-05 10:38:20 +01:00
parent 5684196ef3
commit 93e642c3c9
5 changed files with 47 additions and 11 deletions

View File

@ -41,4 +41,11 @@ extension ContentLanguage {
case .german: return .english
}
}
var text: String {
switch self {
case .english: return "English"
case .german: return "German"
}
}
}

View File

@ -64,7 +64,6 @@ struct LocalizedPageContentView: View {
didChangeContent = true
}
}
.padding()
.onAppear(perform: loadContent)
.onDisappear(perform: saveContent)
}

View File

@ -24,6 +24,9 @@ struct PageContentView: View {
@EnvironmentObject
private var content: Content
@State
private var showTagPicker = false
init(page: Page) {
self.page = page
}
@ -40,10 +43,36 @@ struct PageContentView: View {
Spacer()
}.padding()
} else {
LocalizedPageContentView(pageId: page.id, page: page.localized(in: language), language: language)
.id(page.id + language.rawValue)
VStack(alignment: .leading) {
FlowHStack {
ForEach(page.tags, id: \.id) { tag in
TagView(text: tag.localized(in: language).name)
.foregroundStyle(.white)
}
Button(action: { showTagPicker = true }) {
Image(systemSymbol: .squareAndPencilCircleFill)
.resizable()
.aspectRatio(1, contentMode: .fit)
.frame(height: 22)
.foregroundColor(Color.gray)
.background(Circle()
.fill(Color.white)
.padding(1))
}
.buttonStyle(.plain)
}
LocalizedPageContentView(pageId: page.id, page: page.localized(in: language), language: language)
.id(page.id + language.rawValue)
}.padding()
.sheet(isPresented: $showTagPicker) {
TagSelectionView(
presented: $showTagPicker,
selected: $page.tags,
tags: $content.tags)
}
}
}
}

View File

@ -43,6 +43,7 @@ private struct LocalizedTitle: View {
.foregroundStyle(Color.primary)
.textFieldStyle(.plain)
.lineLimit(2)
.frame(minHeight: 30)
}
}
@ -87,8 +88,11 @@ struct LocalizedPostContentView: View {
var body: some View {
VStack(alignment: .leading) {
Text("Images")
.font(.headline)
HStack {
Text("Images")
.font(.headline)
Button("Transfer from \(language.next.text)", action: copyImagesFromOtherLanguage)
}
PostImagesView(post: post.localized(in: language))
LocalizedTitle(post: post.localized(in: language))
FlowHStack {
@ -119,8 +123,9 @@ struct LocalizedPostContentView: View {
}
}
private func remove(tag: Tag) {
post.tags = post.tags.filter {$0.id != tag.id }
private func copyImagesFromOtherLanguage() {
let images = post.localized(in: language.next).images
post.localized(in: language).images = images
}
}

View File

@ -75,10 +75,6 @@ struct TagSelectionView: View {
}
private func select(tag: Tag) {
guard let index = tags.firstIndex(of: tag) else {
return
}
tags.remove(at: index)
selected.append(tag)
}