refactor(core): introduce EventBus and refactor store infrastructure
- Add EventBus for decoupled event-driven communication between services - Add EventSubscriber component for centralized event handling - Add requestDedupe utility for shared request deduplication - Refactor api/wsService to use eventBus instead of direct router navigation - Extract MessageMapper.toCachedMessages for consistent message mapping - Remove deprecated BaseManager and CacheBus classes - Improve @mention rendering with memberMap support in segment rendering - Update hooks to use useRef instead of useState for fetch tracking
This commit is contained in:
@@ -721,7 +721,7 @@ export interface SSEEvent extends WSEvent {}
|
||||
* 从消息segments中提取纯文本内容
|
||||
* 用于消息列表显示、通知等场景
|
||||
*/
|
||||
export function extractTextFromSegments(segments?: MessageSegment[]): string {
|
||||
export function extractTextFromSegments(segments?: MessageSegment[], memberMap?: Map<string, { nickname: string; user_id: string }>): string {
|
||||
if (!segments || segments.length === 0) {
|
||||
return '';
|
||||
}
|
||||
@@ -731,7 +731,6 @@ export function extractTextFromSegments(segments?: MessageSegment[]): string {
|
||||
for (const segment of segments) {
|
||||
switch (segment.type) {
|
||||
case 'text':
|
||||
// 兼容 content 和 text 两种字段
|
||||
const textData = segment.data as TextSegmentData;
|
||||
result += textData.content ?? textData.text ?? '';
|
||||
break;
|
||||
@@ -739,10 +738,10 @@ export function extractTextFromSegments(segments?: MessageSegment[]): string {
|
||||
const atData = segment.data as AtSegmentData;
|
||||
if (atData.user_id === 'all') {
|
||||
result += '@所有人 ';
|
||||
} else if (atData.nickname) {
|
||||
result += `@${atData.nickname} `;
|
||||
} else {
|
||||
result += `@${atData.user_id} `;
|
||||
const member = memberMap?.get(atData.user_id);
|
||||
const displayName = member?.nickname || atData.nickname || atData.user_id;
|
||||
result += `@${displayName} `;
|
||||
}
|
||||
break;
|
||||
case 'image':
|
||||
|
||||
Reference in New Issue
Block a user