63 lines
2.2 KiB
Swift
63 lines
2.2 KiB
Swift
import SwiftUI
|
|
|
|
struct PinnedMessagesView: View {
|
|
let messages: [Message]
|
|
var onScrollTo: ((String) -> Void)?
|
|
|
|
@Environment(\.dismiss) private var dismiss
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
Group {
|
|
if messages.isEmpty {
|
|
Text("No pinned messages")
|
|
.foregroundStyle(.secondary)
|
|
} else {
|
|
List(messages) { message in
|
|
Button {
|
|
dismiss()
|
|
onScrollTo?(message.id)
|
|
} label: {
|
|
VStack(alignment: .leading, spacing: 4) {
|
|
HStack {
|
|
Image(systemName: "pin.fill")
|
|
.font(.caption)
|
|
.foregroundStyle(.orange)
|
|
Text(message.senderUsername)
|
|
.font(.caption.bold())
|
|
Spacer()
|
|
Text(formatTime(message.createdAt))
|
|
.font(.caption2)
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
Text(message.text ?? "")
|
|
.font(.body)
|
|
.lineLimit(3)
|
|
}
|
|
.padding(.vertical, 4)
|
|
}
|
|
.buttonStyle(.plain)
|
|
}
|
|
}
|
|
}
|
|
.navigationTitle("Pinned Messages")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItem(placement: .cancellationAction) {
|
|
Button("Done") { dismiss() }
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private func formatTime(_ date: Date) -> String {
|
|
let formatter = DateFormatter()
|
|
if Calendar.current.isDateInToday(date) {
|
|
formatter.dateFormat = "HH:mm"
|
|
} else {
|
|
formatter.dateFormat = "MMM d, HH:mm"
|
|
}
|
|
return formatter.string(from: date)
|
|
}
|
|
}
|