damus

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

ChatroomView.swift (2928B)


      1 //
      2 //  ChatroomView.swift
      3 //  damus
      4 //
      5 //  Created by William Casarin on 2022-04-19.
      6 //
      7 
      8 import SwiftUI
      9 
     10 /*
     11 struct ChatroomView: View {
     12     @EnvironmentObject var thread: ThreadModel
     13     @Environment(\.dismiss) var dismiss
     14     @State var once: Bool = false
     15     let damus: DamusState
     16     
     17     var body: some View {
     18         ScrollViewReader { scroller in
     19             ScrollView(.vertical) {
     20                 VStack(alignment: .leading) {
     21                     let count = thread.events.count
     22                     ForEach(Array(zip(thread.events, thread.events.indices)), id: \.0.id) { (ev, ind) in
     23                         ChatView(event: thread.events[ind],
     24                                  prev_ev: ind > 0 ? thread.events[ind-1] : nil,
     25                                  next_ev: ind == count-1 ? nil : thread.events[ind+1],
     26                                  damus_state: damus
     27                         )
     28                         .contextMenu{MenuItems(event: ev, keypair: damus.keypair, target_pubkey: ev.pubkey, bookmarks: damus.bookmarks)}
     29                         .onTapGesture {
     30                             if thread.event.id == ev.id {
     31                                 //dismiss()
     32                                 toggle_thread_view()
     33                             } else {
     34                                 thread.set_active_event(ev, privkey: damus.keypair.privkey)
     35                             }
     36                         }
     37                         .environmentObject(thread)
     38                     }
     39                     
     40                 }
     41                 .padding(.horizontal)
     42                 .padding(.top)
     43                 
     44                 EndBlock()
     45             }
     46             .onReceive(NotificationCenter.default.publisher(for: .select_quote)) { notif in
     47                 let ev = notif.object as! NostrEvent
     48                 if ev.id != thread.event.id {
     49                     thread.set_active_event(ev, privkey: damus.keypair.privkey)
     50                 }
     51                 scroll_to_event(scroller: scroller, id: ev.id, delay: 0, animate: true)
     52             }
     53             .onChange(of: thread.loading) { _ in
     54                 guard !thread.loading && !once else {
     55                     return
     56                 }
     57                 scroll_after_load(thread: thread, proxy: scroller)
     58                 once = true
     59             }
     60             .onAppear() {
     61                 scroll_to_event(scroller: scroller, id: thread.event.id, delay: 0.1, animate: false)
     62             }
     63         }
     64     }
     65     
     66     func toggle_thread_view() {
     67         NotificationCenter.default.post(name: .toggle_thread_view, object: nil)
     68     }
     69 }
     70 
     71 
     72 
     73 
     74 struct ChatroomView_Previews: PreviewProvider {
     75     @State var events = [NostrEvent(content: "hello", pubkey: "pubkey")]
     76     
     77     static var previews: some View {
     78         let state = test_damus_state()
     79         ChatroomView(damus: state)
     80             .environmentObject(ThreadModel(event: test_event, damus_state: state))
     81         
     82     }
     83 }
     84 
     85 */