29 行
1.0 KiB
TypeScript
29 行
1.0 KiB
TypeScript
|
|
import type { ConversationData, ImMessage } from './types'
|
||
|
|
|
||
|
|
export function buildDbName(appKey: string, userId: string): string {
|
||
|
|
return `xuqm_im_${appKey}_${userId}`
|
||
|
|
}
|
||
|
|
|
||
|
|
export function sortMessages(messages: ImMessage[]): ImMessage[] {
|
||
|
|
const deduped = new Map<string, ImMessage>()
|
||
|
|
messages.forEach((message) => {
|
||
|
|
const existing = deduped.get(message.id)
|
||
|
|
if (!existing || message.createdAt >= existing.createdAt) {
|
||
|
|
deduped.set(message.id, message)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
return [...deduped.values()]
|
||
|
|
.sort((a, b) => {
|
||
|
|
if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt
|
||
|
|
return b.id.localeCompare(a.id)
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
export function sortConversations(conversations: ConversationData[]): ConversationData[] {
|
||
|
|
return [...conversations].sort((a, b) => {
|
||
|
|
if (a.isPinned !== b.isPinned) return Number(b.isPinned) - Number(a.isPinned)
|
||
|
|
if (b.lastMsgTime !== a.lastMsgTime) return b.lastMsgTime - a.lastMsgTime
|
||
|
|
return `${a.chatType}:${a.targetId}`.localeCompare(`${b.chatType}:${b.targetId}`)
|
||
|
|
})
|
||
|
|
}
|