Refactor direct messages model

We can track the pubkey in the DirectMessageModel instead of having a
janky tuple.
This commit is contained in:
William Casarin
2023-04-15 12:41:00 -07:00
parent 247270f3d3
commit b5a3697d78
8 changed files with 74 additions and 58 deletions

View File

@@ -9,10 +9,13 @@ import SwiftUI
struct DMChatView: View {
let damus_state: DamusState
let pubkey: String
@EnvironmentObject var dms: DirectMessageModel
@ObservedObject var dms: DirectMessageModel
@State var showPrivateKeyWarning: Bool = false
var pubkey: String {
dms.pubkey
}
var Messages: some View {
ScrollViewReader { scroller in
ScrollView {
@@ -177,10 +180,9 @@ struct DMChatView_Previews: PreviewProvider {
static var previews: some View {
let ev = NostrEvent(content: "hi", pubkey: "pubkey", kind: 1, tags: [])
let model = DirectMessageModel(events: [ev], our_pubkey: "pubkey")
let model = DirectMessageModel(events: [ev], our_pubkey: "pubkey", pubkey: "the_pk")
DMChatView(damus_state: test_damus_state(), pubkey: "pubkey")
.environmentObject(model)
DMChatView(damus_state: test_damus_state(), dms: model)
}
}

View File

@@ -16,22 +16,12 @@ struct DirectMessagesView: View {
let damus_state: DamusState
@State var dm_type: DMType = .friend
@State var open_dm: Bool = false
@State var pubkey: String
@ObservedObject var model: DirectMessagesModel
@State var active_model: DirectMessageModel = DirectMessageModel(our_pubkey: "")
init(damus_state: DamusState) {
self.damus_state = damus_state
self._model = ObservedObject(initialValue: damus_state.dms)
self.pubkey = damus_state.pubkey
}
func MainContent(requests: Bool) -> some View {
ScrollView {
let chat = DMChatView(damus_state: damus_state, pubkey: pubkey)
.environmentObject(active_model)
NavigationLink(destination: chat, isActive: $open_dm) {
let chat = DMChatView(damus_state: damus_state, dms: model.active_model)
NavigationLink(destination: chat, isActive: $model.open_dm) {
EmptyView()
}
LazyVStack(spacing: 0) {
@@ -39,7 +29,7 @@ struct DirectMessagesView: View {
EmptyTimelineView()
} else {
let dms = requests ? model.message_requests : model.friend_dms
ForEach(dms, id: \.0) { tup in
ForEach(dms, id: \.pubkey) { tup in
MaybeEvent(tup)
.padding(.top, 10)
@@ -60,14 +50,12 @@ struct DirectMessagesView: View {
return [.truncate_content, .no_action_bar, .no_translate]
}
func MaybeEvent(_ tup: (String, DirectMessageModel)) -> some View {
func MaybeEvent(_ model: DirectMessageModel) -> some View {
Group {
if let ev = tup.1.events.last {
EventView(damus: damus_state, event: ev, pubkey: tup.0, options: options)
if let ev = model.events.last {
EventView(damus: damus_state, event: ev, pubkey: model.pubkey, options: options)
.onTapGesture {
pubkey = tup.0
active_model = tup.1
open_dm = true
self.model.open_dm_by_model(model)
}
} else {
EmptyView()
@@ -107,6 +95,6 @@ struct DirectMessagesView_Previews: PreviewProvider {
kind: 4,
tags: [])
let ds = test_damus_state()
DirectMessagesView(damus_state: ds)
DirectMessagesView(damus_state: ds, model: ds.dms)
}
}

View File

@@ -271,8 +271,7 @@ struct ProfileView: View {
var dmButton: some View {
let dm_model = damus_state.dms.lookup_or_create(profile.pubkey)
let dmview = DMChatView(damus_state: damus_state, pubkey: profile.pubkey)
.environmentObject(dm_model)
let dmview = DMChatView(damus_state: damus_state, dms: dm_model)
return NavigationLink(destination: dmview) {
Image(systemName: "bubble.left.circle")
.profile_button_style(scheme: colorScheme)