From 93e642c3c9a34dd5577085e95abdff1c3e7a695c Mon Sep 17 00:00:00 2001 From: Christoph Hagen Date: Sun, 5 Jan 2025 10:38:20 +0100 Subject: [PATCH] Show page tags --- CHDataManagement/Model/ContentLanguage.swift | 7 ++++ .../Pages/LocalizedPageContentView.swift | 1 - .../Views/Pages/PageContentView.swift | 33 +++++++++++++++++-- .../Views/Posts/PostContentView.swift | 13 +++++--- .../Views/Posts/TagSelectionView.swift | 4 --- 5 files changed, 47 insertions(+), 11 deletions(-) diff --git a/CHDataManagement/Model/ContentLanguage.swift b/CHDataManagement/Model/ContentLanguage.swift index 90611f5..e0e35f4 100644 --- a/CHDataManagement/Model/ContentLanguage.swift +++ b/CHDataManagement/Model/ContentLanguage.swift @@ -41,4 +41,11 @@ extension ContentLanguage { case .german: return .english } } + + var text: String { + switch self { + case .english: return "English" + case .german: return "German" + } + } } diff --git a/CHDataManagement/Views/Pages/LocalizedPageContentView.swift b/CHDataManagement/Views/Pages/LocalizedPageContentView.swift index 9decda2..79696c2 100644 --- a/CHDataManagement/Views/Pages/LocalizedPageContentView.swift +++ b/CHDataManagement/Views/Pages/LocalizedPageContentView.swift @@ -64,7 +64,6 @@ struct LocalizedPageContentView: View { didChangeContent = true } } - .padding() .onAppear(perform: loadContent) .onDisappear(perform: saveContent) } diff --git a/CHDataManagement/Views/Pages/PageContentView.swift b/CHDataManagement/Views/Pages/PageContentView.swift index e5fed9f..3d57c08 100644 --- a/CHDataManagement/Views/Pages/PageContentView.swift +++ b/CHDataManagement/Views/Pages/PageContentView.swift @@ -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) + } } } + } diff --git a/CHDataManagement/Views/Posts/PostContentView.swift b/CHDataManagement/Views/Posts/PostContentView.swift index b7d862f..f16882e 100644 --- a/CHDataManagement/Views/Posts/PostContentView.swift +++ b/CHDataManagement/Views/Posts/PostContentView.swift @@ -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 } } diff --git a/CHDataManagement/Views/Posts/TagSelectionView.swift b/CHDataManagement/Views/Posts/TagSelectionView.swift index cf5228f..5ab3e83 100644 --- a/CHDataManagement/Views/Posts/TagSelectionView.swift +++ b/CHDataManagement/Views/Posts/TagSelectionView.swift @@ -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) }