better chat view

Signed-off-by: William Casarin <jb55@jb55.com>
This commit is contained in:
William Casarin
2022-04-23 17:10:51 -07:00
parent 4de2ce402e
commit 090385d3da
7 changed files with 106 additions and 60 deletions

View File

@@ -19,6 +19,26 @@ struct ChatView: View {
return prev_ev == nil || prev_ev!.pubkey != event.pubkey
}
func next_replies_to_this() -> Bool {
guard let next = next_ev else {
return false
}
return thread.replies.lookup(next.id) != nil
}
func is_reply_to_prev() -> Bool {
guard let prev = prev_ev else {
return true
}
if let rep = thread.replies.lookup(event.id) {
return rep == prev.id
}
return false
}
var is_active: Bool {
guard let ev = thread.event else {
return false
@@ -56,65 +76,79 @@ struct ChatView: View {
Text("\(reply_desc(profiles: profiles, event: event))")
.font(.footnote)
.foregroundColor(.gray)
.frame(maxWidth: .infinity, alignment: .leading)
.frame(alignment: .leading)
}
@Environment(\.colorScheme) var colorScheme
var body: some View {
let profile = profiles.lookup(id: event.pubkey)
HStack {
VStack {
if is_active || just_started {
ProfilePicView(picture: profile?.picture, size: 32, highlight: is_active ? .main : .none)
}
/*
if just_started {
ProfilePicView(picture: profile?.picture, size: 32, highlight: thread.event.id == event.id ? .main : .none)
} else {
Text("\(format_relative_time(event.created_at))")
.font(.footnote)
.foregroundColor(.gray.opacity(0.5))
}
*/
//ZStack {
//Rectangle()
//.foregroundColor(Color.gray)
//.frame(width: 2)
VStack {
if is_active || just_started {
ProfilePicView(picture: profile?.picture, size: 32, highlight: is_active ? .main : .none)
}
/*
if just_started {
ProfilePicView(picture: profile?.picture, size: 32, highlight: thread.event.id == event.id ? .main : .none)
} else {
Text("\(format_relative_time(event.created_at))")
.font(.footnote)
.foregroundColor(.gray.opacity(0.5))
}
*/
Spacer()
}
.frame(maxWidth: 32)
Spacer()
}
.frame(maxWidth: 32)
//}
VStack {
if just_started {
HStack {
Group {
VStack(alignment: .leading) {
if just_started {
HStack {
ProfileName(pubkey: event.pubkey, profile: profile)
Text("\(format_relative_time(event.created_at))")
.foregroundColor(.gray)
Spacer()
.foregroundColor(.gray)
}
}
}
if let ref_id = thread.replies.lookup(event.id) {
ReplyQuoteView(quoter: event, event_id: ref_id)
.environmentObject(thread)
.environmentObject(profiles)
ReplyDescription
}
Text(event.content)
.frame(maxWidth: .infinity, alignment: .leading)
.textSelection(.enabled)
if is_active || next_ev == nil || next_ev!.pubkey != event.pubkey {
EventActionBar(event: event)
.environmentObject(profiles)
}
if let ref_id = thread.replies.lookup(event.id) {
if !is_reply_to_prev() {
ReplyQuoteView(quoter: event, event_id: ref_id)
.environmentObject(thread)
.environmentObject(profiles)
ReplyDescription
}
}
Spacer()
Text(event.content)
.textSelection(.enabled)
if is_active || next_ev == nil || next_ev!.pubkey != event.pubkey {
EventActionBar(event: event)
.environmentObject(profiles)
}
//Spacer()
}
.padding(6)
}
.padding([.leading], 2)
.background(Color.secondary.opacity(0.1))
.cornerRadius(8.0)
//.border(Color.red)
}
.contentShape(Rectangle())
.id(event.id)
.frame(minHeight: just_started ? PFP_SIZE : 0)
.padding([.bottom], next_ev == nil ? 4 : 0)
//.padding([.bottom], next_ev == nil ? 2 : 0)
//.border(Color.green)
}