优化消息排序逻辑,更新生成排序键的注释,明确置顶标识、时间戳和显示名称的处理方式,提升代码可读性。
This commit is contained in:
@@ -93,9 +93,9 @@ const MessageList: React.FC<MessageListProps> = () => {
|
||||
const newPinned = !currentPinned;
|
||||
|
||||
try {
|
||||
// 1. 立即更新UI(乐观更新)
|
||||
setSessions(prev =>
|
||||
prev.map(s =>
|
||||
// 1. 立即更新UI并重新排序(乐观更新)
|
||||
setSessions(prev => {
|
||||
const updatedSessions = prev.map(s =>
|
||||
s.id === session.id
|
||||
? {
|
||||
...s,
|
||||
@@ -103,8 +103,15 @@ const MessageList: React.FC<MessageListProps> = () => {
|
||||
sortKey: "", // 会重新计算
|
||||
}
|
||||
: s,
|
||||
),
|
||||
);
|
||||
);
|
||||
|
||||
// 重新排序
|
||||
return updatedSessions.sort((a, b) => {
|
||||
const aKey = MessageManager["generateSortKey"](a);
|
||||
const bKey = MessageManager["generateSortKey"](b);
|
||||
return bKey.localeCompare(aKey);
|
||||
});
|
||||
});
|
||||
|
||||
// 2. 后台调用API
|
||||
await updateConfig({
|
||||
|
||||
@@ -52,19 +52,22 @@ export class MessageManager {
|
||||
* @returns 排序键
|
||||
*/
|
||||
private static generateSortKey(session: any): string {
|
||||
// 1. 置顶标识:置顶为1,普通为0(降序时置顶在前)
|
||||
const isTop = session.config?.top ? 1 : 0;
|
||||
// 时间戳:使用正序时间戳,最新的时间值最大
|
||||
|
||||
// 2. 时间戳:直接使用时间戳,数值越大表示越新
|
||||
const timestamp = new Date(session.lastUpdateTime || new Date()).getTime();
|
||||
|
||||
// 3. 显示名称:用于稳定排序
|
||||
const displayName = (
|
||||
session.conRemark ||
|
||||
session.nickname ||
|
||||
""
|
||||
).toLowerCase();
|
||||
|
||||
// 格式:置顶标识|时间戳(补齐15位)|显示名称
|
||||
// 降序排序:置顶(1)在前,时间大的在前(即最新的在前),名称小的在前
|
||||
const timeStr = String(timestamp).padStart(16, "0");
|
||||
return `${isTop}|${timeStr}|${displayName}`;
|
||||
// 格式:置顶标识|时间戳|显示名称
|
||||
// 降序排序:置顶(1)在前,时间大的在前,名称小的在前
|
||||
return `${isTop}|${timestamp}|${displayName}`;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user