Files
damus/damus/Views/Profile/EventProfileName.swift
William Casarin bffa42a13a Supporter Badges
2023-05-15 11:57:37 -07:00

110 lines
3.0 KiB
Swift

//
// EventProfileName.swift
// damus
//
// Created by William Casarin on 2023-03-14.
//
import SwiftUI
/// Profile Name used when displaying an event in the timeline
struct EventProfileName: View {
let damus_state: DamusState
let pubkey: String
let profile: Profile?
@State var display_name: DisplayName?
@State var nip05: NIP05?
@State var donation: Int?
let size: EventViewKind
init(pubkey: String, profile: Profile?, damus: DamusState, size: EventViewKind = .normal) {
self.damus_state = damus
self.pubkey = pubkey
self.profile = profile
self.size = size
self._donation = State(wrappedValue: profile?.damus_donation)
}
var friend_type: FriendType? {
return get_friend_type(contacts: damus_state.contacts, pubkey: self.pubkey)
}
var current_nip05: NIP05? {
nip05 ?? damus_state.profiles.is_validated(pubkey)
}
var current_display_name: DisplayName {
return display_name ?? Profile.displayName(profile: profile, pubkey: pubkey)
}
var onlyzapper: Bool {
guard let profile else {
return false
}
return profile.reactions == false
}
var supporter: Int? {
guard let donation, donation > 0
else {
return nil
}
return donation
}
var body: some View {
HStack(spacing: 2) {
switch current_display_name {
case .one(let one):
Text(one)
.font(.body.weight(.bold))
case .both(let both):
Text(both.display_name)
.font(.body.weight(.bold))
Text(verbatim: "@\(both.username)")
.foregroundColor(.gray)
.font(eventviewsize_to_font(size))
}
if let nip05 = current_nip05 {
NIP05Badge(nip05: nip05, pubkey: pubkey, contacts: damus_state.contacts, show_domain: false, clickable: false)
}
if current_nip05 == nil, let frend = friend_type {
FriendIcon(friend: frend)
}
if onlyzapper {
Image("zap-hashtag")
.frame(width: 14, height: 14)
}
if let supporter {
SupporterBadge(percent: supporter)
}
}
.onReceive(handle_notify(.profile_updated)) { notif in
let update = notif.object as! ProfileUpdate
if update.pubkey != pubkey {
return
}
display_name = Profile.displayName(profile: update.profile, pubkey: pubkey)
nip05 = damus_state.profiles.is_validated(pubkey)
donation = update.profile.damus_donation
}
}
}
struct EventProfileName_Previews: PreviewProvider {
static var previews: some View {
EventProfileName(pubkey: "pk", profile: nil, damus: test_damus_state())
}
}