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 */