Show linking posts on page content

This commit is contained in:
Christoph Hagen
2025-01-13 22:34:51 +01:00
parent e69486895f
commit 4131b483e6
7 changed files with 80 additions and 64 deletions

View File

@ -8,7 +8,6 @@ import SFSafeSymbols
**UI**
- Image search: Add view to see all images and filter
- Pages: Show linking posts
- Page Content: Show all results of `PageGenerationResults`
- Files: Show usages of file
- Buttons to insert special commands (images, page links, ...)

View File

@ -12,8 +12,6 @@ extension FileManager {
extension Content {
private static let dbPath = FileManager.default.documentDirectory.appendingPathComponent("db").path()
static let mock: Content = Content(
settings: .default,
posts: [.empty, .mock, .fullMock],

View File

@ -0,0 +1,25 @@
import SwiftUI
struct ListPopup: View {
@Environment(\.dismiss)
var dismiss
let items: [String]
var body: some View {
VStack {
List {
ForEach(items, id: \.self) { page in
Text(page)
}
}
.frame(minHeight: min(CGFloat(items.count) * 31, 500))
Button("Dismiss") { dismiss() }
}
.padding(.vertical)
.onTapGesture {
dismiss()
}
}
}

View File

@ -0,0 +1,36 @@
import SwiftUI
import SFSafeSymbols
struct TextWithPopup: View {
let symbol: SFSymbol
let text: LocalizedStringKey
let items: [String]
@State
private var isHovering = false
var body: some View {
HStack {
Image(systemSymbol: symbol)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 16, height: 16)
Text(text)
}
.contentShape(Rectangle())
.onTapGesture {
if items.count > 0 {
isHovering.toggle()
}
}
.sheet(isPresented: $isHovering) {
ListPopup(items: items)
.onTapGesture {
isHovering.toggle()
}
}
}
}

View File

@ -42,9 +42,17 @@ struct LocalizedPageContentView: View {
}
Spacer()
}
if let generationResults {
PageContentResultsView(results: generationResults)
}
HStack {
if let generationResults {
PageContentResultsView(results: generationResults)
}
let linkingPosts = content.posts.filter { $0.linkedPage == page }
TextWithPopup(
symbol: .ipadAndArrowForward,
text: "\(linkingPosts.count) linking posts",
items: linkingPosts.map { $0.title(in: language) })
}.foregroundStyle(.secondary)
HighlightedTextEditor(
text: $pageContent,
highlightRules: .markdown)

View File

@ -1,64 +1,6 @@
import SwiftUI
import SFSafeSymbols
private struct ListPopup: View {
@Environment(\.dismiss)
var dismiss
let items: [String]
var body: some View {
VStack {
List {
ForEach(items, id: \.self) { page in
Text(page)
}
}
.frame(minHeight: min(CGFloat(items.count) * 31, 500))
Button("Dismiss") { dismiss() }
}
.padding(.vertical)
.onTapGesture {
dismiss()
}
}
}
private struct TextWithPopup: View {
let symbol: SFSymbol
let text: LocalizedStringKey
let items: [String]
@State
private var isHovering = false
var body: some View {
HStack {
Image(systemSymbol: symbol)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 16, height: 16)
Text(text)
}
.contentShape(Rectangle())
.onTapGesture {
if items.count > 0 {
isHovering.toggle()
}
}
.sheet(isPresented: $isHovering) {
ListPopup(items: items)
.onTapGesture {
isHovering.toggle()
}
}
}
}
struct PageContentResultsView: View {
@Environment(\.language)