MCPcopy Create free account
hub / github.com/astercloud/aster / useMessageList

Function useMessageList

ui/src/composables/useMessage.ts:74–160  ·  view source on GitHub ↗
(messages: Message[])

Source from the content-addressed store, hash-verified

72 * 消息列表处理逻辑
73 */
74export function useMessageList(messages: Message[]) {
75 // 按日期分组
76 const groupedByDate = computed(() => {
77 const groups = new Map<string, Message[]>();
78
79 messages.forEach((message) => {
80 const date = formatMessageDate(message.createdAt);
81 if (!groups.has(date)) {
82 groups.set(date, []);
83 }
84 groups.get(date)!.push(message);
85 });
86
87 return Array.from(groups.entries()).map(([date, msgs]) => ({
88 date,
89 messages: msgs,
90 }));
91 });
92
93 // 按发送者分组(连续消息合并)
94 const groupedBySender = computed(() => {
95 const groups: Array<{ sender: string; messages: Message[] }> = [];
96 let currentSender = "";
97 let currentGroup: Message[] = [];
98
99 messages.forEach((message) => {
100 const sender = message.role;
101
102 if (sender !== currentSender) {
103 if (currentGroup.length > 0) {
104 groups.push({ sender: currentSender, messages: currentGroup });
105 }
106 currentSender = sender;
107 currentGroup = [message];
108 } else {
109 currentGroup.push(message);
110 }
111 });
112
113 if (currentGroup.length > 0) {
114 groups.push({ sender: currentSender, messages: currentGroup });
115 }
116
117 return groups;
118 });
119
120 // 搜索消息
121 const searchMessages = (query: string) => {
122 if (!query.trim()) return messages;
123
124 const lowerQuery = query.toLowerCase();
125 return messages.filter((message) => {
126 if (message.type === "text") {
127 return message.content.text.toLowerCase().includes(lowerQuery);
128 }
129 return false;
130 });
131 };

Callers

nothing calls this directly

Calls 5

formatMessageDateFunction · 0.85
hasMethod · 0.80
filterMethod · 0.80
setMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected