From d10e5a87deba481629f735d27998ba871133284d Mon Sep 17 00:00:00 2001 From: Terry Yiu <963907+tyiu@users.noreply.github.com> Date: Sun, 12 Feb 2023 02:53:48 -0500 Subject: [PATCH] Add replies count to selected event action bar --- damus/Views/ActionBar/EventActionBar.swift | 16 +++++++++++++--- damus/Views/Events/MutedEventView.swift | 8 +++++--- damus/Views/Events/SelectedEventView.swift | 10 ++++++---- damus/Views/ThreadV2View.swift | 9 ++++++--- 4 files changed, 30 insertions(+), 13 deletions(-) diff --git a/damus/Views/ActionBar/EventActionBar.swift b/damus/Views/ActionBar/EventActionBar.swift index 1852b918..628e5ced 100644 --- a/damus/Views/ActionBar/EventActionBar.swift +++ b/damus/Views/ActionBar/EventActionBar.swift @@ -23,19 +23,21 @@ struct EventActionBar: View { let event: NostrEvent let test_lnurl: String? let generator = UIImpactFeedbackGenerator(style: .medium) + let thread: ThreadV2? // just used for previews @State var sheet: ActionBarSheet? = nil @State var confirm_boost: Bool = false @State var show_share_sheet: Bool = false - + @ObservedObject var bar: ActionBarModel - init(damus_state: DamusState, event: NostrEvent, bar: ActionBarModel? = nil, test_lnurl: String? = nil) { + init(damus_state: DamusState, event: NostrEvent, bar: ActionBarModel? = nil, test_lnurl: String? = nil, thread: ThreadV2? = nil) { self.damus_state = damus_state self.event = event self.test_lnurl = test_lnurl _bar = ObservedObject(wrappedValue: bar ?? make_actionbar_model(ev: event.id, damus: damus_state)) + self.thread = thread } var lnurl: String? { @@ -45,10 +47,18 @@ struct EventActionBar: View { var body: some View { HStack { if damus_state.keypair.privkey != nil { - EventActionButton(img: "bubble.left", col: nil) { + let self_replied = (thread != nil && thread!.childEvents.first { $0.pubkey == damus_state.pubkey } != nil) + + EventActionButton(img: "bubble.left", col: self_replied ? Color.blue : nil) { notify(.reply, event) } .accessibilityLabel(NSLocalizedString("Reply", comment: "Accessibility label for reply button")) + if thread != nil && !thread!.childEvents.isEmpty { + Text("\(thread!.childEvents.count)") + .offset(x: -10) + .font(.footnote.weight(.medium)) + .foregroundColor(self_replied ? Color.blue : Color.gray) + } } Spacer() ZStack { diff --git a/damus/Views/Events/MutedEventView.swift b/damus/Views/Events/MutedEventView.swift index fdfbeb39..3578305b 100644 --- a/damus/Views/Events/MutedEventView.swift +++ b/damus/Views/Events/MutedEventView.swift @@ -11,6 +11,7 @@ struct MutedEventView: View { let damus_state: DamusState let event: NostrEvent let scroller: ScrollViewProxy? + let thread: ThreadV2? let selected: Bool @Binding var nav_target: String? @@ -18,7 +19,7 @@ struct MutedEventView: View { @State var shown: Bool @Environment(\.colorScheme) var colorScheme - init(damus_state: DamusState, event: NostrEvent, scroller: ScrollViewProxy?, nav_target: Binding, navigating: Binding, selected: Bool) { + init(damus_state: DamusState, event: NostrEvent, scroller: ScrollViewProxy?, nav_target: Binding, navigating: Binding, selected: Bool, thread: ThreadV2?) { self.damus_state = damus_state self.event = event self.scroller = scroller @@ -26,6 +27,7 @@ struct MutedEventView: View { self._nav_target = nav_target self._navigating = navigating self._shown = State(initialValue: should_show_event(contacts: damus_state.contacts, ev: event)) + self.thread = thread } var should_mute: Bool { @@ -55,7 +57,7 @@ struct MutedEventView: View { var Event: some View { Group { if selected { - SelectedEventView(damus: damus_state, event: event) + SelectedEventView(damus: damus_state, event: event, thread: thread) } else { EventView(damus: damus_state, event: event, has_action_bar: true) .onTapGesture { @@ -106,7 +108,7 @@ struct MutedEventView_Previews: PreviewProvider { static var previews: some View { - MutedEventView(damus_state: test_damus_state(), event: test_event, scroller: nil, nav_target: $nav_target, navigating: $navigating, selected: false) + MutedEventView(damus_state: test_damus_state(), event: test_event, scroller: nil, nav_target: $nav_target, navigating: $navigating, selected: false, thread: nil) .frame(width: .infinity, height: 50) } } diff --git a/damus/Views/Events/SelectedEventView.swift b/damus/Views/Events/SelectedEventView.swift index a4cf4648..967fb296 100644 --- a/damus/Views/Events/SelectedEventView.swift +++ b/damus/Views/Events/SelectedEventView.swift @@ -10,6 +10,7 @@ import SwiftUI struct SelectedEventView: View { let damus: DamusState let event: NostrEvent + let thread: ThreadV2? var pubkey: String { event.pubkey @@ -17,10 +18,11 @@ struct SelectedEventView: View { @StateObject var bar: ActionBarModel - init(damus: DamusState, event: NostrEvent) { + init(damus: DamusState, event: NostrEvent, thread: ThreadV2?) { self.damus = damus self.event = event self._bar = StateObject(wrappedValue: make_actionbar_model(ev: event.id, damus: damus)) + self.thread = thread } var body: some View { @@ -47,8 +49,8 @@ struct SelectedEventView: View { EventDetailBar(state: damus, target: event.id, target_pk: event.pubkey) Divider() } - - EventActionBar(damus_state: damus, event: event) + + EventActionBar(damus_state: damus, event: event, thread: thread) .padding([.top], 4) Divider() @@ -67,7 +69,7 @@ struct SelectedEventView: View { struct SelectedEventView_Previews: PreviewProvider { static var previews: some View { - SelectedEventView(damus: test_damus_state(), event: test_event) + SelectedEventView(damus: test_damus_state(), event: test_event, thread: nil) .padding() } } diff --git a/damus/Views/ThreadV2View.swift b/damus/Views/ThreadV2View.swift index 94038f3c..61e9d1c7 100644 --- a/damus/Views/ThreadV2View.swift +++ b/damus/Views/ThreadV2View.swift @@ -263,7 +263,8 @@ struct ThreadV2View: View { scroller: reader, nav_target: $nav_target, navigating: $navigating, - selected: false + selected: false, + thread: nil ) } }.background(GeometryReader { geometry in @@ -285,7 +286,8 @@ struct ThreadV2View: View { scroller: reader, nav_target: $nav_target, navigating: $navigating, - selected: true + selected: true, + thread: thread ).id("main") // MARK: - Responses of the actual event view @@ -296,7 +298,8 @@ struct ThreadV2View: View { scroller: reader, nav_target: $nav_target, navigating: $navigating, - selected: false + selected: false, + thread: nil ) } }.padding()