SelectedEventView.swift (3037B)
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 init(damus: DamusState, event: NostrEvent, size: EventViewKind) { 22 self.damus = damus 23 self.event = event 24 self.size = size 25 self._bar = StateObject(wrappedValue: make_actionbar_model(ev: event.id, damus: damus)) 26 } 27 28 var body: some View { 29 HStack(alignment: .top) { 30 VStack(alignment: .leading) { 31 HStack { 32 EventProfile(damus_state: damus, pubkey: pubkey, size: .normal) 33 34 Spacer() 35 36 EventMenuContext(damus: damus, event: event) 37 .padding([.bottom], 4) 38 } 39 .padding(.horizontal) 40 .minimumScaleFactor(0.75) 41 .lineLimit(1) 42 43 ReplyPart(events: damus.events, event: event, keypair: damus.keypair, ndb: damus.ndb) 44 .padding(.horizontal) 45 46 ProxyView(event: event) 47 .padding(.top, 5) 48 .padding(.horizontal) 49 50 EventBody(damus_state: damus, event: event, size: size, options: [.wide]) 51 52 Mention 53 54 Text(verbatim: "\(format_date(created_at: event.created_at))") 55 .padding([.top, .leading, .trailing]) 56 .font(.footnote) 57 .foregroundColor(.gray) 58 59 Divider() 60 .padding([.bottom], 4) 61 62 if !bar.is_empty { 63 EventDetailBar(state: damus, target: event.id, target_pk: event.pubkey) 64 .padding(.horizontal) 65 Divider() 66 } 67 68 EventActionBar(damus_state: damus, event: event) 69 .padding([.top], 4) 70 .padding(.horizontal) 71 72 Divider() 73 .padding([.top], 4) 74 } 75 .onReceive(handle_notify(.update_stats)) { target in 76 guard target == self.event.id else { return } 77 self.bar.update(damus: self.damus, evid: target) 78 } 79 .compositingGroup() 80 } 81 } 82 83 var Mention: some View { 84 Group { 85 if let mention = first_eref_mention(ev: event, keypair: damus.keypair) { 86 MentionView(damus_state: damus, mention: mention) 87 .padding(.horizontal) 88 } 89 } 90 } 91 } 92 93 struct SelectedEventView_Previews: PreviewProvider { 94 static var previews: some View { 95 SelectedEventView(damus: test_damus_state, event: test_note, size: .selected) 96 } 97 }