52 lines
1.6 KiB
Swift
52 lines
1.6 KiB
Swift
import SwiftUI
|
|
|
|
struct IncomingMessageBanner: Identifiable {
|
|
let id = UUID()
|
|
let message: MessageItem
|
|
let senderName: String
|
|
let messagePreview: String
|
|
}
|
|
|
|
struct NewMessageBannerView: View {
|
|
let banner: IncomingMessageBanner
|
|
let onOpen: () -> Void
|
|
let onDismiss: () -> Void
|
|
|
|
var body: some View {
|
|
HStack(alignment: .center, spacing: 12) {
|
|
Image(systemName: "bubble.left.and.bubble.right.fill")
|
|
.foregroundColor(.accentColor)
|
|
.imageScale(.medium)
|
|
|
|
VStack(alignment: .leading, spacing: 4) {
|
|
Text(banner.senderName)
|
|
.font(.headline)
|
|
.foregroundColor(.primary)
|
|
.lineLimit(1)
|
|
|
|
Text(banner.messagePreview)
|
|
.font(.subheadline)
|
|
.foregroundColor(.secondary)
|
|
.lineLimit(2)
|
|
}
|
|
|
|
Spacer(minLength: 8)
|
|
|
|
Button(action: onDismiss) {
|
|
Image(systemName: "xmark")
|
|
.font(.footnote.weight(.semibold))
|
|
.foregroundColor(.secondary)
|
|
.padding(6)
|
|
.background(Color.secondary.opacity(0.15), in: Circle())
|
|
}
|
|
.buttonStyle(.plain)
|
|
}
|
|
.padding(.horizontal, 16)
|
|
.padding(.vertical, 14)
|
|
.background(.ultraThinMaterial, in: RoundedRectangle(cornerRadius: 18, style: .continuous))
|
|
.shadow(color: Color.black.opacity(0.12), radius: 12, y: 6)
|
|
.contentShape(Rectangle())
|
|
.onTapGesture(perform: onOpen)
|
|
}
|
|
}
|