SelectedEventView.swift (3361B)
1 // 2 // SelectedEventView.swift 3 // damus 4 // 5 // Created by William Casarin on 2023-01-23. 6 // 7 8 import SwiftUI 9 10 struct SelectedEventView: View { 11 let damus: DamusState 12 let event: NostrEvent 13 let size: EventViewKind 14 15 var pubkey: Pubkey { 16 event.pubkey 17 } 18 19 @StateObject var bar: ActionBarModel 20 21 var replying_to: NostrEvent? { 22 guard let note_ref = event.event_refs(damus.keypair).first(where: { evref in evref.is_direct_reply != nil })?.is_direct_reply else { 23 return nil 24 } 25 26 return damus.events.lookup(note_ref.note_id) 27 } 28 29 init(damus: DamusState, event: NostrEvent, size: EventViewKind) { 30 self.damus = damus 31 self.event = event 32 self.size = size 33 self._bar = StateObject(wrappedValue: make_actionbar_model(ev: event.id, damus: damus)) 34 } 35 36 var body: some View { 37 HStack(alignment: .top) { 38 VStack(alignment: .leading) { 39 HStack { 40 EventProfile(damus_state: damus, pubkey: pubkey, size: .normal) 41 42 Spacer() 43 44 EventMenuContext(damus: damus, event: event) 45 .padding([.bottom], 4) 46 } 47 .padding(.horizontal) 48 .minimumScaleFactor(0.75) 49 .lineLimit(1) 50 51 if event_is_reply(event.event_refs(damus.keypair)) { 52 ReplyDescription(event: event, replying_to: replying_to, ndb: damus.ndb) 53 .padding(.horizontal) 54 } 55 56 ProxyView(event: event) 57 .padding(.top, 5) 58 .padding(.horizontal) 59 60 EventBody(damus_state: damus, event: event, size: size, options: [.wide]) 61 62 Mention 63 64 Text(verbatim: "\(format_date(created_at: event.created_at))") 65 .padding([.top, .leading, .trailing]) 66 .font(.footnote) 67 .foregroundColor(.gray) 68 69 Divider() 70 .padding([.bottom], 4) 71 72 if !bar.is_empty { 73 EventDetailBar(state: damus, target: event.id, target_pk: event.pubkey) 74 .padding(.horizontal) 75 Divider() 76 } 77 78 EventActionBar(damus_state: damus, event: event) 79 .padding([.top], 4) 80 .padding(.horizontal) 81 82 Divider() 83 .padding([.top], 4) 84 } 85 .onReceive(handle_notify(.update_stats)) { target in 86 guard target == self.event.id else { return } 87 self.bar.update(damus: self.damus, evid: target) 88 } 89 .compositingGroup() 90 } 91 } 92 93 var Mention: some View { 94 Group { 95 if let mention = first_eref_mention(ev: event, keypair: damus.keypair) { 96 MentionView(damus_state: damus, mention: mention) 97 .padding(.horizontal) 98 } 99 } 100 } 101 } 102 103 struct SelectedEventView_Previews: PreviewProvider { 104 static var previews: some View { 105 SelectedEventView(damus: test_damus_state, event: test_note, size: .selected) 106 } 107 }