damus

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

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 }