Skip to content

Commit 2dcc74e

Browse files
committed
iOS: tap any Log entry to open its shareable result card (discoverability)
1 parent bf5582a commit 2dcc74e

1 file changed

Lines changed: 28 additions & 15 deletions

File tree

ios/OpenProgression/Features/Log/LogView.swift

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@ import SwiftUI
22
import SwiftData
33
import Charts
44

5+
private struct ShareTarget: Identifiable { let id = UUID(); let card: ResultCard }
6+
57
struct LogView: View {
68
@Environment(\.modelContext) private var ctx
79
@Query(sort: \LogEntry.date, order: .reverse) private var entries: [LogEntry]
10+
@State private var shareTarget: ShareTarget?
811

912
var body: some View {
1013
NavigationStack {
@@ -48,6 +51,7 @@ struct LogView: View {
4851
}
4952
.listStyle(.plain)
5053
.scrollContentBackground(.hidden)
54+
.sheet(item: $shareTarget) { t in ShareResultView(card: t.card).presentationDragIndicator(.visible) }
5155
}
5256

5357
// MARK: stats
@@ -79,24 +83,33 @@ struct LogView: View {
7983
}
8084

8185
private func row(_ e: LogEntry) -> some View {
82-
HStack(spacing: 12) {
83-
Circle().fill(Theme.levelColor(e.level)).frame(width: 8, height: 8)
84-
VStack(alignment: .leading, spacing: 2) {
85-
HStack(spacing: 6) {
86-
Text(e.name).font(.body(15, .semibold)).foregroundStyle(Theme.text)
87-
if prIDs.contains(e.persistentModelID) {
88-
Text("PR").font(.system(size: 9, weight: .black)).foregroundStyle(.black)
89-
.padding(.horizontal, 5).padding(.vertical, 2).background(Theme.primary, in: Capsule())
86+
Button {
87+
Haptics.tap()
88+
shareTarget = ShareTarget(card: ResultCard(
89+
name: e.name, result: e.result,
90+
subtitle: "\(e.type) · \(levelShort[max(1, min(7, e.level)) - 1])", levelNumber: e.level))
91+
} label: {
92+
HStack(spacing: 12) {
93+
Circle().fill(Theme.levelColor(e.level)).frame(width: 8, height: 8)
94+
VStack(alignment: .leading, spacing: 2) {
95+
HStack(spacing: 6) {
96+
Text(e.name).font(.body(15, .semibold)).foregroundStyle(Theme.text)
97+
if prIDs.contains(e.persistentModelID) {
98+
Text("PR").font(.system(size: 9, weight: .black)).foregroundStyle(.black)
99+
.padding(.horizontal, 5).padding(.vertical, 2).background(Theme.primary, in: Capsule())
100+
}
90101
}
102+
Text("\(e.type) · \(prettyDate(e.date))\(e.notes.map { " · \($0)" } ?? "")")
103+
.font(.body(12)).foregroundStyle(Theme.textFaint).lineLimit(1)
91104
}
92-
Text("\(e.type) · \(prettyDate(e.date))\(e.notes.map { " · \($0)" } ?? "")")
93-
.font(.body(12)).foregroundStyle(Theme.textFaint).lineLimit(1)
105+
Spacer()
106+
Text(e.result).font(.display(16, .bold)).foregroundStyle(Theme.primary)
107+
Image(systemName: "square.and.arrow.up").font(.system(size: 12, weight: .semibold)).foregroundStyle(Theme.textFaint)
94108
}
95-
Spacer()
96-
Text(e.result).font(.display(16, .bold)).foregroundStyle(Theme.primary)
97-
}
98-
.padding(.vertical, 11)
99-
.overlay(alignment: .bottom) { Rectangle().fill(Theme.stroke).frame(height: 1) }
109+
.padding(.vertical, 11)
110+
.contentShape(Rectangle())
111+
.overlay(alignment: .bottom) { Rectangle().fill(Theme.stroke).frame(height: 1) }
112+
}.buttonStyle(.plain)
100113
}
101114

102115
// MARK: derived

0 commit comments

Comments
 (0)