fix: order not showing behaviour after loading

This commit is contained in:
Tiago Vasconcelos 2023-03-31 14:40:25 +01:00
parent 6c8f405cb8
commit bb0e6c069f

View file

@ -11,6 +11,7 @@ async function chatDialog(path) {
dialog: false, dialog: false,
isChat: true, isChat: true,
loading: false, loading: false,
messagesMap: new Map(),
nostrMessages: [], nostrMessages: [],
newMessage: '', newMessage: '',
ordersTable: { ordersTable: {
@ -83,17 +84,17 @@ async function chatDialog(path) {
.sort((a, b) => b.created_at - a.created_at) .sort((a, b) => b.created_at - a.created_at)
}, },
ordersList() { ordersList() {
return Object.values( let orders = this.nostrMessages
this.nostrMessages .sort((a, b) => b.created_at - a.created_at)
.sort((a, b) => b.created_at - a.created_at) .filter(o => isJson(o.json))
.filter(o => isJson(o.msg)) .reduce((acc, cur) => {
.reduce((acc, cur) => { const obj = JSON.parse(cur.json)
const obj = JSON.parse(cur.msg) const key = obj.id
const key = obj.id const curGroup = acc[key] ?? {created_at: cur.timestamp}
const curGroup = acc[key] ?? {created_at: cur.timestamp} return {...acc, [key]: {...curGroup, ...obj}}
return {...acc, [key]: {...curGroup, ...obj}} }, {})
}, {})
) return Object.values(orders)
} }
}, },
methods: { methods: {
@ -107,8 +108,8 @@ async function chatDialog(path) {
}, },
async startPool() { async startPool() {
this.loading = true this.loading = true
let messagesMap = new Map() let relays = Array.from(this.relays)
let sub = this.pool.sub(Array.from(this.relays), [ let filters = [
{ {
kinds: [4], kinds: [4],
authors: [this.account.pubkey] authors: [this.account.pubkey]
@ -117,45 +118,55 @@ async function chatDialog(path) {
kinds: [4], kinds: [4],
'#p': [this.account.pubkey] '#p': [this.account.pubkey]
} }
]) ]
let events = await this.pool.list(relays, filters)
sub.on('eose', () => { for (const event of events) {
this.loading = false await this.processMessage(event)
this.nostrMessages = Array.from(messagesMap.values()) }
})
this.nostrMessages = Array.from(this.messagesMap.values())
this.loading = false
let sub = this.pool.sub(
relays,
filters.map(f => ({...f, since: Date.now() / 1000}))
)
sub.on('event', async event => { sub.on('event', async event => {
let mine = event.pubkey == this.account.pubkey await this.processMessage(event)
let sender = mine ? this.merchant : event.pubkey this.nostrMessages = Array.from(this.messagesMap.values())
try {
let plaintext
if (this.account.privkey) {
plaintext = await NostrTools.nip04.decrypt(
this.account.privkey,
sender,
event.content
)
} else if (this.account.useExtension && this.hasNip07) {
plaintext = await window.nostr.nip04.decrypt(
sender,
event.content
)
}
if (plaintext) {
messagesMap.set(event.id, {
created_at: event.created_at,
msg: plaintext,
timestamp: timeFromNow(event.created_at * 1000),
sender: `${mine ? 'Me' : 'Merchant'}`
})
this.nostrMessages = Array.from(messagesMap.values())
}
} catch {
console.debug('Unable to decrypt message! Not for us...')
}
}) })
this.sub = sub this.sub = sub
}, },
async processMessage(event) {
let mine = event.pubkey == this.account.pubkey
let sender = mine ? this.merchant : event.pubkey
try {
let plaintext
if (this.account.privkey) {
plaintext = await NostrTools.nip04.decrypt(
this.account.privkey,
sender,
event.content
)
} else if (this.account.useExtension && this.hasNip07) {
plaintext = await window.nostr.nip04.decrypt(sender, event.content)
}
if (plaintext) {
this.messagesMap.set(event.id, {
created_at: event.created_at,
msg: plaintext,
timestamp: timeFromNow(event.created_at * 1000),
sender: `${mine ? 'Me' : 'Merchant'}`
})
}
return null
} catch {
console.debug('Unable to decrypt message! Not for us...')
return null
}
},
async sendMessage() { async sendMessage() {
if (this.newMessage && this.newMessage.length < 1) return if (this.newMessage && this.newMessage.length < 1) return
let event = { let event = {