damus

nostr ios client
git clone git://jb55.com/damus
Log | Files | Refs | README | LICENSE

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 }