Preserve memoization of message list (#10434)
This commit is contained in:
@@ -216,6 +216,7 @@ export class Convo {
|
||||
status: this.status,
|
||||
items: this.getItems(),
|
||||
convo: this.convo!,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
error: undefined,
|
||||
...shared,
|
||||
...methods,
|
||||
@@ -226,6 +227,7 @@ export class Convo {
|
||||
status: this.status,
|
||||
items: this.getItems(),
|
||||
convo: this.convo!,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
error: undefined,
|
||||
...shared,
|
||||
...methods,
|
||||
@@ -236,6 +238,7 @@ export class Convo {
|
||||
status: this.status,
|
||||
items: this.getItems(),
|
||||
convo: this.convo!,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
error: undefined,
|
||||
...shared,
|
||||
...methods,
|
||||
@@ -246,6 +249,7 @@ export class Convo {
|
||||
status: this.status,
|
||||
items: this.getItems(),
|
||||
convo: this.convo!,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
error: undefined,
|
||||
...shared,
|
||||
...methods,
|
||||
@@ -1078,7 +1082,8 @@ export class Convo {
|
||||
|
||||
// continue queue processing
|
||||
await this.processPendingMessages()
|
||||
} catch (e: any) {
|
||||
} catch (err) {
|
||||
const e = err as Error
|
||||
this.handleSendMessageFailure(e)
|
||||
this.isProcessingPendingMessages = false
|
||||
}
|
||||
@@ -1177,7 +1182,8 @@ export class Convo {
|
||||
this.commit()
|
||||
|
||||
logger.debug(`sent ${this.pendingMessages.size} pending messages`, {})
|
||||
} catch (e: any) {
|
||||
} catch (err) {
|
||||
const e = err as Error
|
||||
this.handleSendMessageFailure(e)
|
||||
}
|
||||
}
|
||||
@@ -1231,25 +1237,18 @@ export class Convo {
|
||||
type: 'message',
|
||||
key: m.id,
|
||||
message: m,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
nextMessage: null,
|
||||
prevMessage: null,
|
||||
})
|
||||
} else if (ChatBskyConvoDefs.isDeletedMessageView(m)) {
|
||||
items.unshift({
|
||||
type: 'deleted-message',
|
||||
key: m.id,
|
||||
message: m,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
nextMessage: null,
|
||||
prevMessage: null,
|
||||
})
|
||||
} else if (ChatBskyConvoDefs.isSystemMessageView(m)) {
|
||||
items.unshift({
|
||||
type: 'system-message',
|
||||
key: m.id,
|
||||
message: m,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -1271,25 +1270,18 @@ export class Convo {
|
||||
type: 'message',
|
||||
key: m.id,
|
||||
message: m,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
nextMessage: null,
|
||||
prevMessage: null,
|
||||
})
|
||||
} else if (ChatBskyConvoDefs.isDeletedMessageView(m)) {
|
||||
items.push({
|
||||
type: 'deleted-message',
|
||||
key: m.id,
|
||||
message: m,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
nextMessage: null,
|
||||
prevMessage: null,
|
||||
})
|
||||
} else if (ChatBskyConvoDefs.isSystemMessageView(m)) {
|
||||
items.push({
|
||||
type: 'system-message',
|
||||
key: m.id,
|
||||
message: m,
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
})
|
||||
}
|
||||
})
|
||||
@@ -1310,9 +1302,6 @@ export class Convo {
|
||||
did: this.senderUserDid,
|
||||
},
|
||||
},
|
||||
relatedProfiles: this.relatedProfiles,
|
||||
nextMessage: null,
|
||||
prevMessage: null,
|
||||
failed: this.pendingMessageFailure !== null,
|
||||
retry:
|
||||
this.pendingMessageFailure === 'recoverable'
|
||||
@@ -1334,53 +1323,12 @@ export class Convo {
|
||||
})
|
||||
}
|
||||
|
||||
return items
|
||||
.filter(item => {
|
||||
if (isConvoItemMessage(item)) {
|
||||
return !this.deletedMessages.has(item.message.id)
|
||||
}
|
||||
return true
|
||||
})
|
||||
.map((item, i, arr) => {
|
||||
let nextMessage = null
|
||||
let prevMessage = null
|
||||
const isMessage = isConvoItemMessage(item)
|
||||
|
||||
if (isMessage) {
|
||||
if (
|
||||
ChatBskyConvoDefs.isMessageView(item.message) ||
|
||||
ChatBskyConvoDefs.isDeletedMessageView(item.message)
|
||||
) {
|
||||
const next = arr[i + 1]
|
||||
|
||||
if (
|
||||
isConvoItemMessage(next) &&
|
||||
(ChatBskyConvoDefs.isMessageView(next.message) ||
|
||||
ChatBskyConvoDefs.isDeletedMessageView(next.message))
|
||||
) {
|
||||
nextMessage = next.message
|
||||
}
|
||||
|
||||
const prev = arr[i - 1]
|
||||
|
||||
if (
|
||||
isConvoItemMessage(prev) &&
|
||||
(ChatBskyConvoDefs.isMessageView(prev.message) ||
|
||||
ChatBskyConvoDefs.isDeletedMessageView(prev.message))
|
||||
) {
|
||||
prevMessage = prev.message
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
...item,
|
||||
nextMessage,
|
||||
prevMessage,
|
||||
}
|
||||
}
|
||||
|
||||
return item
|
||||
})
|
||||
return items.filter(item => {
|
||||
if (isConvoItemMessage(item)) {
|
||||
return !this.deletedMessages.has(item.message.id)
|
||||
}
|
||||
return true
|
||||
})
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -72,29 +72,11 @@ export type ConvoItem =
|
||||
type: 'message'
|
||||
key: string
|
||||
message: ChatBskyConvoDefs.MessageView
|
||||
relatedProfiles: Map<string, ChatBskyActorDefs.ProfileViewBasic>
|
||||
nextMessage:
|
||||
| ChatBskyConvoDefs.MessageView
|
||||
| ChatBskyConvoDefs.DeletedMessageView
|
||||
| null
|
||||
prevMessage:
|
||||
| ChatBskyConvoDefs.MessageView
|
||||
| ChatBskyConvoDefs.DeletedMessageView
|
||||
| null
|
||||
}
|
||||
| {
|
||||
type: 'pending-message'
|
||||
key: string
|
||||
message: ChatBskyConvoDefs.MessageView
|
||||
relatedProfiles: Map<string, ChatBskyActorDefs.ProfileViewBasic>
|
||||
nextMessage:
|
||||
| ChatBskyConvoDefs.MessageView
|
||||
| ChatBskyConvoDefs.DeletedMessageView
|
||||
| null
|
||||
prevMessage:
|
||||
| ChatBskyConvoDefs.MessageView
|
||||
| ChatBskyConvoDefs.DeletedMessageView
|
||||
| null
|
||||
failed: boolean
|
||||
/**
|
||||
* Retry sending the message. If present, the message is in a failed state.
|
||||
@@ -105,21 +87,11 @@ export type ConvoItem =
|
||||
type: 'deleted-message'
|
||||
key: string
|
||||
message: ChatBskyConvoDefs.DeletedMessageView
|
||||
relatedProfiles: Map<string, ChatBskyActorDefs.ProfileViewBasic>
|
||||
nextMessage:
|
||||
| ChatBskyConvoDefs.MessageView
|
||||
| ChatBskyConvoDefs.DeletedMessageView
|
||||
| null
|
||||
prevMessage:
|
||||
| ChatBskyConvoDefs.MessageView
|
||||
| ChatBskyConvoDefs.DeletedMessageView
|
||||
| null
|
||||
}
|
||||
| {
|
||||
type: 'system-message'
|
||||
key: string
|
||||
message: ChatBskyConvoDefs.SystemMessageView
|
||||
relatedProfiles: Map<string, ChatBskyActorDefs.ProfileViewBasic>
|
||||
}
|
||||
| {
|
||||
type: 'error'
|
||||
@@ -172,6 +144,7 @@ export type ConvoStateReady = {
|
||||
status: ConvoStatus.Ready
|
||||
items: ConvoItem[]
|
||||
convo: ConvoWithDetails
|
||||
relatedProfiles: Map<string, ChatBskyActorDefs.ProfileViewBasic>
|
||||
error: undefined
|
||||
isFetchingHistory: boolean
|
||||
hasAllHistory: boolean
|
||||
@@ -186,6 +159,7 @@ export type ConvoStateBackgrounded = {
|
||||
status: ConvoStatus.Backgrounded
|
||||
items: ConvoItem[]
|
||||
convo: ConvoWithDetails
|
||||
relatedProfiles: Map<string, ChatBskyActorDefs.ProfileViewBasic>
|
||||
error: undefined
|
||||
isFetchingHistory: boolean
|
||||
hasAllHistory: boolean
|
||||
@@ -200,6 +174,7 @@ export type ConvoStateSuspended = {
|
||||
status: ConvoStatus.Suspended
|
||||
items: ConvoItem[]
|
||||
convo: ConvoWithDetails
|
||||
relatedProfiles: Map<string, ChatBskyActorDefs.ProfileViewBasic>
|
||||
error: undefined
|
||||
isFetchingHistory: boolean
|
||||
hasAllHistory: boolean
|
||||
@@ -228,6 +203,7 @@ export type ConvoStateDisabled = {
|
||||
status: ConvoStatus.Disabled
|
||||
items: ConvoItem[]
|
||||
convo: ConvoWithDetails
|
||||
relatedProfiles: Map<string, ChatBskyActorDefs.ProfileViewBasic>
|
||||
error: undefined
|
||||
isFetchingHistory: boolean
|
||||
hasAllHistory: boolean
|
||||
|
||||
Reference in New Issue
Block a user