snapshot of https://github.com/RocketChat/Rocket.Chat.git (develop, 2026-09-16; blobs > 131072B omitted)
Some checks failed
Create issues from TODOs / todos (push) Failing after 3s
Close inactive issues / close-issues (push) Has been cancelled
Deploy GitHub Pages / deploy-preview (push) Has been cancelled
CI / ⚙️ Variables Setup (push) Has been cancelled
CI / ⚙️ Test Guard (push) Has been cancelled
CI / 🚀 Notify external services - draft (push) Has been cancelled
CI / 📦 Build Packages (push) Has been cancelled
CI / 📦 Meteor Build (coverage) (push) Has been cancelled
CI / 📦 Meteor Build (production) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [account-service presence-service omnichannel-transcript-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [authorization-service queue-worker-service ddp-streamer-service], fips) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Build Docker (amd64, [rocketchat], fips) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [account-service presence-service omnichannel-transcript-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [authorization-service queue-worker-service ddp-streamer-service], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], ${{ (github.event_name != 'release' && github.ref != 'refs/heads/develop') && 'coverage' || 'production' }}) (push) Has been cancelled
CI / 🚢 Build Docker (arm64, [rocketchat], coverage) (push) Has been cancelled
CI / 🚢 Publish Docker Images (ghcr.io) (push) Has been cancelled
CI / 📦 Track Image Sizes (push) Has been cancelled
CI / 🔎 Code Check - Action Lint (push) Has been cancelled
CI / 🔎 Code Check (push) Has been cancelled
CI / 🔨 Test Storybook (push) Has been cancelled
CI / 🔨 Test Unit (push) Has been cancelled
CI / 🔨 Test API (CE) (push) Has been cancelled
CI / 🔨 Test API Livechat (CE) (push) Has been cancelled
CI / 🔨 Test UI (CE) (push) Has been cancelled
CI / 🔨 Test API (EE) (push) Has been cancelled
CI / 🔨 Test API Livechat (EE) (push) Has been cancelled
CI / 🔨 Test API Apps (deno-runtime - EE) (push) Has been cancelled
CI / 🔨 Test UI (EE) (push) Has been cancelled
CI / 🔨 Test API (FIPS) (push) Has been cancelled
CI / 🔨 Test API Livechat (FIPS) (push) Has been cancelled
CI / 🔨 Test UI (FIPS) (push) Has been cancelled
CI / 🔨 Test Federation Matrix (push) Has been cancelled
CI / 📊 Report Coverage (push) Has been cancelled
CI / ✅ Tests Done (push) Has been cancelled
CI / 🚀 Publish build assets (push) Has been cancelled
CI / 🚀 Publish Docker Images (DockerHub) (push) Has been cancelled
CI / 🚀 Notify external services (push) Has been cancelled
CI / Update Version Durability (push) Has been cancelled
Release / Release (push) Has been cancelled
Auto-close duplicate issues / auto-close-duplicates (push) Failing after 1s
Code scanning - action / CodeQL-Build (push) Failing after 1s

This commit is contained in:
upstream-mirror
2026-09-16 01:21:02 +05:00
commit 30810eecd7
10161 changed files with 987110 additions and 0 deletions

View File

@@ -0,0 +1,145 @@
import { MAX_SOURCE_MESSAGE_LENGTH } from '@rocket.chat/ai-search';
import type { IRoom } from '@rocket.chat/core-typings';
import {
Box,
Icon,
Message,
MessageBody,
MessageContainer,
MessageContainerFixed,
MessageHeader,
MessageLeftContainer,
MessageName,
MessageRole,
MessageTimestamp,
MessageUsername,
} from '@rocket.chat/fuselage';
import type { AISearchResult } from '@rocket.chat/rest-typings';
import { MessageAvatar } from '@rocket.chat/ui-avatar';
import type { ComponentProps, ReactElement } from 'react';
import { useTranslation } from 'react-i18next';
import MarkdownText from '../../components/MarkdownText';
import { roomCoordinator } from '../../lib/rooms/roomCoordinator';
const formatMessageTime = (ts: string | undefined): string => {
if (!ts) {
return '';
}
const date = new Date(ts);
if (Number.isNaN(date.getTime())) {
return '';
}
return date.toLocaleDateString([], { month: 'short', day: 'numeric' });
};
const getMessageHref = (item: AISearchResult): string | undefined => {
const { room } = item;
if (!room) {
return undefined;
}
const href = roomCoordinator.getRouteLink(room.t, {
rid: room._id || item.rid,
name: room.name,
});
return href ? `${href}?msg=${encodeURIComponent(item.msgId || item._id)}` : undefined;
};
const trimSourceMessage = (text: string): string =>
text.length > MAX_SOURCE_MESSAGE_LENGTH ? `${text.slice(0, MAX_SOURCE_MESSAGE_LENGTH).trimEnd()}...` : text;
const getRoomIcon = (roomType: IRoom['t'] | undefined): ComponentProps<typeof Icon>['name'] => {
if (roomType === 'd') {
return 'at';
}
if (roomType === 'p') {
return 'lock';
}
return 'hash';
};
export type SearchSourceResultProps = {
item: AISearchResult;
};
const SearchSourceResult = ({ item }: SearchSourceResultProps): ReactElement => {
const { t } = useTranslation();
const roomLabel = item.room?.fname || item.room?.name;
const href = getMessageHref(item);
const username = item.u?.username || item.u?.name || t('Unknown_User');
const displayName = item.u?.name || username;
const messageTime = formatMessageTime(item.ts);
const relevanceScore = typeof item.score === 'number' ? Math.max(0, Math.min(100, Math.round(item.score * 100))) : undefined;
return (
<Box
is='article'
role='listitem'
position='relative'
borderBlockEndWidth={1}
borderBlockEndStyle='solid'
borderBlockEndColor='extra-light'
paddingBlockStart={16}
paddingBlockEnd={16}
>
<Message clickable={Boolean(href)}>
<MessageLeftContainer>
<MessageAvatar username={username} size='x36' />
</MessageLeftContainer>
<MessageContainer>
<MessageHeader>
<MessageName title={displayName}>{displayName}</MessageName>
{item.u?.username && (
<>
{' '}
<MessageUsername>@{item.u.username}</MessageUsername>
</>
)}
{roomLabel && (
<MessageRole>
<Box display='flex' alignItems='center' gap={4}>
<Icon name={getRoomIcon(item.room?.t)} size='x12' />
{roomLabel}
</Box>
</MessageRole>
)}
{messageTime && <MessageTimestamp title={item.ts}>{messageTime}</MessageTimestamp>}
</MessageHeader>
<MessageBody>
<MarkdownText
content={trimSourceMessage(item.text || t('Intelligent_Search_Result'))}
variant='inline'
parseEmoji
wordBreak='break-word'
/>
</MessageBody>
</MessageContainer>
{typeof relevanceScore === 'number' && (
<MessageContainerFixed>
<MessageRole title={`${relevanceScore}%`}>{relevanceScore}%</MessageRole>
</MessageContainerFixed>
)}
</Message>
{href && (
<Box
is='a'
href={href}
aria-label={t('Jump_to_message')}
position='absolute'
insetBlockStart={0}
insetBlockEnd={0}
insetInlineStart={0}
insetInlineEnd={0}
/>
)}
</Box>
);
};
export default SearchSourceResult;