navigation: fix navigation popping issues in threads
Changelog-Fixed: Fix navigation popping in threads
This commit is contained in:
@@ -232,28 +232,41 @@ struct BuildThreadV2View: View {
|
||||
struct ThreadV2View: View {
|
||||
let damus: DamusState
|
||||
let thread: ThreadV2
|
||||
@State var nav_target: String? = nil
|
||||
@State var navigating: Bool = false
|
||||
|
||||
var MaybeBuildThreadView: some View {
|
||||
Group {
|
||||
if let evid = nav_target {
|
||||
BuildThreadV2View(damus: damus, event_id: evid)
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationLink(destination: MaybeBuildThreadView, isActive: $navigating) {
|
||||
EmptyView()
|
||||
}
|
||||
ScrollViewReader { reader in
|
||||
ScrollView {
|
||||
VStack {
|
||||
// MARK: - Parents events view
|
||||
VStack {
|
||||
ForEach(thread.parentEvents, id: \.id) { event in
|
||||
NavigationLink(destination: BuildThreadV2View(
|
||||
EventView(
|
||||
event: event,
|
||||
highlight: .none,
|
||||
has_action_bar: true,
|
||||
damus: damus,
|
||||
event_id: event.id
|
||||
)){
|
||||
EventView(
|
||||
event: event,
|
||||
highlight: .none,
|
||||
has_action_bar: true,
|
||||
damus: damus,
|
||||
show_friend_icon: true, // TODO: change it
|
||||
size: .small
|
||||
)
|
||||
show_friend_icon: true, // TODO: change it
|
||||
size: .small
|
||||
)
|
||||
.onTapGesture {
|
||||
nav_target = event.id
|
||||
navigating = true
|
||||
}
|
||||
.buttonStyle(.plain)
|
||||
.onAppear {
|
||||
// TODO: find another solution to prevent layout shifting and layout blocking on large responses
|
||||
reader.scrollTo("main", anchor: .bottom)
|
||||
@@ -283,19 +296,18 @@ struct ThreadV2View: View {
|
||||
|
||||
// MARK: - Responses of the actual event view
|
||||
ForEach(thread.childEvents, id: \.id) { event in
|
||||
NavigationLink(destination: BuildThreadV2View(
|
||||
EventView(
|
||||
event: event,
|
||||
highlight: .none,
|
||||
has_action_bar: true,
|
||||
damus: damus,
|
||||
event_id: event.id
|
||||
)){
|
||||
EventView(
|
||||
event: event,
|
||||
highlight: .none,
|
||||
has_action_bar: true,
|
||||
damus: damus,
|
||||
show_friend_icon: true, // TODO: change it
|
||||
size: .small
|
||||
)
|
||||
}.buttonStyle(.plain)
|
||||
show_friend_icon: true, // TODO: change it
|
||||
size: .small
|
||||
)
|
||||
.onTapGesture {
|
||||
nav_target = event.id
|
||||
navigating = true
|
||||
}
|
||||
}
|
||||
}.padding()
|
||||
}.navigationBarTitle("Thread")
|
||||
|
||||
@@ -17,8 +17,23 @@ struct InnerTimelineView: View {
|
||||
let damus: DamusState
|
||||
let show_friend_icon: Bool
|
||||
let filter: (NostrEvent) -> Bool
|
||||
@State var nav_target: NostrEvent? = nil
|
||||
@State var navigating: Bool = false
|
||||
|
||||
var MaybeBuildThreadView: some View {
|
||||
Group {
|
||||
if let ev = nav_target {
|
||||
BuildThreadV2View(damus: damus, event_id: (ev.inner_event ?? ev).id)
|
||||
} else {
|
||||
EmptyView()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationLink(destination: MaybeBuildThreadView, isActive: $navigating) {
|
||||
EmptyView()
|
||||
}
|
||||
LazyVStack {
|
||||
if events.isEmpty {
|
||||
EmptyTimelineView()
|
||||
@@ -28,14 +43,11 @@ struct InnerTimelineView: View {
|
||||
//let is_chatroom = should_show_chatroom(ev)
|
||||
//let tv = ThreadView(thread: tm, damus: damus, is_chatroom: is_chatroom)
|
||||
|
||||
NavigationLink(destination: BuildThreadV2View(
|
||||
damus: damus,
|
||||
event_id: (ev.inner_event ?? ev).id
|
||||
)) {
|
||||
EventView(event: ev, highlight: .none, has_action_bar: true, damus: damus, show_friend_icon: show_friend_icon)
|
||||
}
|
||||
.isDetailLink(true)
|
||||
.buttonStyle(PlainButtonStyle())
|
||||
EventView(event: ev, highlight: .none, has_action_bar: true, damus: damus, show_friend_icon: show_friend_icon)
|
||||
.onTapGesture {
|
||||
nav_target = ev
|
||||
navigating = true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user