102 lines
3.8 KiB
Swift
102 lines
3.8 KiB
Swift
//
|
|
// ThreadV2View.swift
|
|
// damus
|
|
//
|
|
// Created by Thomas Tastet on 25/12/2022.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct ThreadView: View {
|
|
let state: DamusState
|
|
|
|
@StateObject var thread: ThreadModel
|
|
@Environment(\.dismiss) var dismiss
|
|
|
|
var parent_events: [NostrEvent] {
|
|
state.events.parent_events(event: thread.event)
|
|
}
|
|
|
|
var child_events: [NostrEvent] {
|
|
state.events.child_events(event: thread.event)
|
|
}
|
|
|
|
var body: some View {
|
|
ScrollViewReader { reader in
|
|
ScrollView {
|
|
LazyVStack {
|
|
// MARK: - Parents events view
|
|
ForEach(parent_events, id: \.id) { parent_event in
|
|
MutedEventView(damus_state: state,
|
|
event: parent_event,
|
|
scroller: reader,
|
|
selected: false
|
|
)
|
|
.onTapGesture {
|
|
thread.set_active_event(parent_event, privkey: state.keypair.privkey)
|
|
scroll_to_event(scroller: reader, id: parent_event.id, delay: 0.1, animate: false)
|
|
}
|
|
|
|
Divider()
|
|
.padding(.top, 4)
|
|
.padding(.leading, 25 * 2)
|
|
}.background(GeometryReader { geometry in
|
|
// get the height and width of the EventView view
|
|
let eventHeight = geometry.frame(in: .global).height
|
|
// let eventWidth = geometry.frame(in: .global).width
|
|
|
|
// vertical gray line in the background
|
|
Rectangle()
|
|
.fill(Color.gray.opacity(0.25))
|
|
.frame(width: 2, height: eventHeight)
|
|
.offset(x: 25, y: 40)
|
|
})
|
|
|
|
// MARK: - Actual event view
|
|
MutedEventView(
|
|
damus_state: state,
|
|
event: self.thread.event,
|
|
scroller: reader,
|
|
selected: true
|
|
)
|
|
.id(self.thread.event.id)
|
|
|
|
ForEach(child_events, id: \.id) { child_event in
|
|
MutedEventView(
|
|
damus_state: state,
|
|
event: child_event,
|
|
scroller: nil,
|
|
selected: false
|
|
)
|
|
.onTapGesture {
|
|
thread.set_active_event(child_event, privkey: state.keypair.privkey)
|
|
scroll_to_event(scroller: reader, id: child_event.id, delay: 0.1, animate: false)
|
|
}
|
|
|
|
Divider()
|
|
.padding([.top], 4)
|
|
}
|
|
}.padding()
|
|
}.navigationBarTitle(NSLocalizedString("Thread", comment: "Navigation bar title for note thread."))
|
|
.onAppear {
|
|
thread.subscribe()
|
|
scroll_to_event(scroller: reader, id: self.thread.event.id, delay: 0.0, animate: false)
|
|
}
|
|
.onDisappear {
|
|
thread.unsubscribe()
|
|
}
|
|
.onReceive(handle_notify(.switched_timeline)) { notif in
|
|
dismiss()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
struct ThreadView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
let state = test_damus_state()
|
|
let thread = ThreadModel(event: test_event, damus_state: state)
|
|
ThreadView(state: state, thread: thread)
|
|
}
|
|
}
|