59 lines
1.8 KiB
Swift
59 lines
1.8 KiB
Swift
import SwiftUI
|
|
|
|
struct ConversationRowView: View {
|
|
let conversation: Conversation
|
|
let currentUserId: String
|
|
let isOnline: Bool
|
|
let unreadCount: Int
|
|
|
|
var body: some View {
|
|
HStack(spacing: 12) {
|
|
// Avatar
|
|
ZStack(alignment: .bottomTrailing) {
|
|
CircularAvatarView(
|
|
name: conversation.displayName(currentUserId: currentUserId),
|
|
size: 44,
|
|
isGroup: conversation.isGroup
|
|
)
|
|
|
|
if isOnline && !conversation.isGroup {
|
|
OnlineDotOverlay(size: 12)
|
|
}
|
|
}
|
|
|
|
VStack(alignment: .leading, spacing: 2) {
|
|
HStack {
|
|
if conversation.isFavorite {
|
|
Image(systemName: "star.fill")
|
|
.font(.caption2)
|
|
.foregroundStyle(.yellow)
|
|
}
|
|
|
|
Text(conversation.displayName(currentUserId: currentUserId))
|
|
.font(unreadCount > 0 ? .body.bold() : .body)
|
|
.lineLimit(1)
|
|
}
|
|
|
|
if conversation.isGroup {
|
|
Text("\(conversation.members.count) members")
|
|
.font(.caption)
|
|
.foregroundStyle(.secondary)
|
|
}
|
|
}
|
|
|
|
Spacer()
|
|
|
|
if unreadCount > 0 {
|
|
Text("\(unreadCount)")
|
|
.font(.caption2.bold())
|
|
.foregroundStyle(.white)
|
|
.padding(.horizontal, 8)
|
|
.padding(.vertical, 2)
|
|
.background(Color.blue)
|
|
.clipShape(Capsule())
|
|
}
|
|
}
|
|
.padding(.vertical, 4)
|
|
}
|
|
}
|